Linux에서 Firefox의 메모리 사용 제어

Firefox가 32개의 단일 프로세스였을 때 생활은 매우 간단했다.
2021년에 64비트로 일련의 열 서브 프로세스를 시작했는데 Firefox 프로세스가 16Gb의 램과 20Gb의 교환을 분배하는 것을 자주 보았는데 이것은 다른 프로세스의 속도를 늦추는 것이다.
Ubuntu 20.04를 사용하고 있습니다. 다음은 무한 메모리 사용을 제어하는 방법입니다.다른 Linux 릴리스의 단계는 비슷할 수 있습니다.

1. cgroups v2와 교환 제어 사용하기

  • 열고 편집/etc/default/grub(잊지 마세요sudo) 거기서 찾으세요GRUB_CMDLINE_LINUX_DEFAULT.추가systemd.unified_cgroup_hierarchy=1swapaccount=1.
  • 다음은 내 아들의 모습.
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.unified_cgroup_hierarchy=1 swapaccount=1"
    
  • 운행sudo update-grub.
  • 재부팅.
  • 실행mount -t cgroup2을 통해 cgroupsv2가 활성화되었는지 테스트합니다.출력은 이와 유사해야 합니다.
  • $ mount -t cgroup2
    cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
    

    이거 뭐 하는 거예요?

    systemd.unified_cgroup_hierarchy=1 cgroups v2 지원을 사용하면 메모리 제한을 강제로 실행합니다.
    v2를 사용하면 cgroups v1의 소프트웨어를 사용할 수 있습니다. (오래된 Docker 버전인 것 같습니다.) 작업이 중단될 수 있습니다.만약 네가 오래된 소프트웨어를 사용할 때 문제가 발생한다면, 너는 원인이 무엇인지 안다.swapaccount=1 스왑 사용을 제한할 수 있습니다.사용하지 않으면 cgroups는 교환이 아닌 RAM에만 메모리 제한을 실행합니다. 따라서 Firefox 프로세스는 RAM 제한을 초과하지 않고 다른 모든 내용을 교환에 밀어넣습니다.swapaccount에 대한 더 많은 정보를 알고 싶으면 herehere를 읽으세요.

    2. 이니시에이터 편집


    xfce를 사용하기 때문에 메뉴에서 Firefox 시작 단축키를 편집할 수 있습니다.브라우저가 시작되는 방식에 따라 비슷한 작업을 수행할 수 있습니다.
  • 시작 명령은 다음과 같아야 합니다.
  • systemd-run --unit=my-firefox --user --scope -p MemoryHigh=6G -p MemoryMax=7G -p MemorySwapMax=0 firefox %U
    
  • 지금부터 이 명령/이니시에이터를 사용하여 브라우저를 시작합니다.
  • 이거 뭐 하는 거예요?

    systemd-runsystemd와 cGroup의 제어 아래 특수 설정을 사용하여 프로세스를 시작할 수 있으며 소위 단원 파일을 만들 필요가 없습니다.이 예에서는 firefox를 시작하지만 다른 프로그램에 적용할 수 있습니다.--unit=my-firefox는 시스템d'범위'의 이름을 제시했고 그 중에서 firefox 프로세스가 실행될 것이다.이 매개 변수를 생략하거나 필요에 따라 이름을 바꿀 수 있습니다.나는 스코프의 이름을 짓는 것이 매우 유용하다는 것을 발견했다. 이렇게 하면 이후에 더욱 쉽게 그것을 진단할 수 있을 것이다.--user 시스템 대신 사용자 슬라이드에서 scope를 실행하도록 지시합니다.암호를 묻지 않고 프로세스를 시작할 수 있습니다.--scope 프로세스의 시작 방식을 설정합니다.솔직히 말해서, 나는 이것이 무슨 소용이 있는지 모르겠지만, 너는 그것을 필요로 한다.-p MemoryHigh=6G Firefox 프로세스에서 할당할 수 있는 메모리의 양에 대해 6G의 "소프트 하드"제한을 설정합니다.Firefox에서 더 많은 메모리를 요청할 수 있지만 운영 체제는 분배 속도를 낮추어 거부할 수 있습니다.실제로 나는 사용률이 이 설정의 값을 초과하지 않을 것이라고 생각한다.-p MemoryMax=7G Firefox에 대해 7G의 하드 메모리 한계를 설정합니다.만약 그것이 그렇게 많은 것을 분배하려고 시도한다면, 그 과정은 말살될 것이다.시스템의 다른 프로세스가 Firefox에 미치지 않도록 보호하려면 이 설정을 보류할 수 있습니다.-p MemorySwapMax=0 Firefox에서는 스왑을 사용할 수 없습니다.내 실험에서 소량의 교환을 허용한다면 Firefox의 성능은 더욱 나빠질 것이다.만약 대량(>10G) 교환이 허용된다면 Firefox는 대량의 메모리를 주동적으로 출시하여 전체적으로 정상적으로 운행할 수 있으나 SSD가 마모될 것이다.
    man systemd.resource-control 의 메모리* 속성을 읽습니다.

    3. Firefox 프로세스 수 감소

  • 브라우저 기본 설정 열기about:preferences
  • 성능으로 스크롤하여 권장 성능 설정 사용
  • 선택 취소
  • 컨텐츠 처리 제한 사항2으로 변경

  • 이거 뭐 하는 거예요?


    Firefox는 하위 프로세스를 사용하여 페이지 렌더링을 가속화합니다.문제는 각 하위 프로세스에 많은 RAM이 사용되고 있다는 점입니다.Firefox는 자동으로 그것들의 수를 결정할 것이다. 나에게 이 숫자는 8인 것 같다.2Gb 메모리를 사용하는 모든 하위 프로세스는 전체 사용률을 16Gb 이상으로 쉽게 향상시킬 수 있습니다.
    자세한 내용은 https://support.mozilla.org/en-US/kb/performance-settings를 참조하십시오.

    4. 테스트 및 진단


    브라우저를 시작하면 이 명령을 사용하여 메모리 사용 여부를 볼 수 있습니다
    systemctl --user show my-firefox.scope | grep Memory
    
    다음은 현재 사용량이 5.5Gib인 것을 보여 주는 출력입니다.
    MemoryCurrent=5596528640
    EffectiveMemoryNodes=
    AllowedMemoryNodes=
    MemoryAccounting=yes
    DefaultMemoryLow=0
    DefaultMemoryMin=0
    MemoryMin=0
    MemoryLow=0
    MemoryHigh=6442450944
    MemoryMax=7516192768
    MemorySwapMax=0
    MemoryLimit=infinity
    
  • 여러 탭을 로드하고 MemoryCurrent 값을 관찰합니다.만약 브라우저가 동결되고 MemoryCurrent가 가깝거나 높으면 설정을 조정해야 할 수도 있습니다.만약 일이 계속 순조롭게 진행된다면, 감소를 고려할 것이다MemoryHigh.
  • 5. 설정 조정


    Firefox 컨텐츠 프로세스는 최대 부하 시 1.5-2.3Gb를 사용하기 때문에 MemoryHigh 값은 MemoryHigh보다 커야 합니다. 여기서 N*2.3Gb는 브라우저 설정에 설정된 컨텐츠 프로세스 수입니다.
    Firefox의 부모 프로세스와 그에 따른 다른 것들에 자질구레한 내용을 추가해야 합니다.
    만약 기계 메모리가 부족하다면, 브라우저 설정의 내용 프로세스 수를 더 줄이는 것을 고려하십시오.

    좋은 웹페이지 즐겨찾기