cpulimit
CPU 사용량이 높기 때문에 Chromium 웹 브라우저의 속도를 조절 하고 터미널을 사용하여 실행하고 싶습니다 .
cpulimit -l 30 -- chromium --incognito
그러나 예상대로 CPU 사용량을 제한하지 않습니다(예: 최대 제한은 30%). 100% 다시 사용할 수 있습니다. 왜? 내가 뭘 잘못했나요?
답변1
예, Chromium은 스레드 중 하나를 중지해도 크게 신경 쓰지 않습니다.
cpulimit
2021년에는 정말 사용하고 싶은 도구가 아니지만,특히대화형 소프트웨어에는 적합하지 않습니다. 신호로 프로세스를 중지했다가 다시 시작하여 프로세스를 "조절"합니다(또는 귀하의 경우 실패합니다). 음. 이는 오디오 및 비디오를 처리하거나 부드러운 스크롤을 시도할 가능성이 높기 때문에 최신 브라우저에서는 실제로 원하지 않는 불안정성을 유발하는 끔찍한 해킹입니다.
좋은 소식은 실제로는 필요하지 않다는 것입니다. Linux에는 cgroups
모든 프로세스 또는 프로세스 그룹의 리소스 소비를 제한하는 데 사용할 수 있는 기능이 있습니다(예: Chromium, Skype 및 Zoom을 함께 사용하여 전체 CPU 용량의 50% 이상을 소비하지 않으려는 경우). 또한 스토리지 액세스 속도 및 네트워크 전송과 같은 다른 사항을 제한하는 데에도 사용할 수 있습니다.
브라우저의 경우 이는 다음과 같이 요약됩니다(테스트되지 않음).
# you might need to create the right mountpoints first
sudo mkdir /sys/fs/cgroup/cpu
sudo mount -t cgroup -o cpu cpu /sys/fs/cgroup/cpu
# Create a group that controls `cpu` allotment, called `/browser`
sudo cgcreate -g cpu:/browser
# Create a group that controls `cpu` allotment, called `/important`
sudo cgcreate -g cpu:/important
# allocate few shares to your `browser` group, and many shares of the CPU time to the `important` group.
sudo cgset -r cpu.shares=128 browser
sudo cgset -r cpu.shares=1024 important
cgexec -g cpu:browser chromium --incognitio
cgexec -g cpu:important make -j10 #or whatever
트릭은 일반적으로 대화형 세션(예: gnome-session
)에 더 높은 공유를 제공하고 다른 것에는 더 낮은 공유를 제공하는 것입니다.
이 점에 유의하시기 바랍니다보장하다공유는 그렇지 않습니다.빼앗다, 필요한 경우는 제외됩니다. 즉, 해당 시간 동안 CPU가 다른 작업을 수행할 수 없는 경우(다른 작업이 실행되지 않거나 하드 드라이브를 기다리는 등 더 많은 공유가 있는 모든 항목이 차단되어) 여전히 브라우저 프로세스에 할당됩니다. 하지만 일반적으로 이것이 바로 여러분이 원하는 것입니다. 단점이 없습니다(나머지 시스템 실행 속도를 느리게 만들지 않으며, 브라우저가 해야 할 일을 더 빠르게 "수행"할 뿐이며, 장점으로는 에너지 절약도 가능합니다). 평균화: 여러 CPU 코어가 막 끝나면 자동으로 다운클럭/일시 중지될 수 있습니다.
답변2
CPU를 그렇게 많이 사용하는 이유를 찾는 데 집중하거나, 크롬에 내장된 작업 관리자를 사용하여 어떤 탭이 이를 사용하고 있는지 찾거나, 성능 및 플레임 그래프와 같은 프로파일러가 유용할 수 있다고 생각합니다.
그러나 정말로 브라우저 속도를 늦추고 싶다면 cgroup과 같은 최신 내장 솔루션을 고려해야 합니다. 예를 들면 다음과 같습니다.https://forums.gentoo.org/viewtopic-t-1010870-start-0.html
또는 (재)nice를 사용하여 크롬 우선순위를 낮추거나 AdBlockers를 사용하거나 하드웨어를 업그레이드하는 것을 고려해보세요.
cpulimit가 예상대로 작동하지 않는 이유는 여러 스레드와 sigstop이 상위 프로세스를 중지할 때 하위 프로세스가 중지되지 않기 때문일 수 있지만 확실하지 않습니다.
업데이트: 이https://github.com/opsengine/cpulimit/issues/39이:https://stackoverflow.com/questions/31623697/limit-the-percentage-of-cpu-a-process-tree-is-allowed-to-use내 의심을 확인하면 아마도 모든 하위 프로세스를 제한하지 않을 것입니다. 최신 버전의 cpulimit는 --include-children
다음 옵션을 제공합니다 -i
.