由于 CPU 使用率高,我想限制 Chromium 网络浏览器cpulimit
并使用终端运行:
cpulimit -l 30 -- chromium --incognito
Run Code Online (Sandbox Code Playgroud)
但它并没有像预期的那样限制 CPU 使用率(即最大为 30%)。它再次使用 100%。为什么?我究竟做错了什么?
Mar*_*ler 28
是的,当你停止它的一个线程时,铬并不在意。
cpulimit
是,在 2021 年,真的不是你想要使用的那种工具,尤其是交互式软件:它通过信号停止和恢复进程来“节流”进程(或者在你的情况下尝试不成功)。嗯。这是一个可怕的黑客攻击,它会导致您在可能正在处理音频和视频或尝试平滑滚动的现代浏览器中真正不想要的不可靠性。
好消息是你真的不需要它。Linux 具有cgroups
,这些可用于限制任何进程或进程组的资源消耗(例如,如果您不希望铬、Skype 和缩放一起消耗超过 50% 的整体 CPU 容量) . 它们还可用于限制其他事物,例如存储访问速度和网络传输。
就您的浏览器而言,这归结为(头顶,未测试):
# 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
Run Code Online (Sandbox Code Playgroud)
诀窍通常是为您的交互式会话(例如gnome-session
)提供较高的份额,而其他内容则较低。
请注意,这保证了股份;它不会带走,除非必要。即,如果您的 CPU 在那段时间内不能做任何其他事情(因为没有其他东西在运行,或者因为所有具有更多份额的东西都被阻塞了,例如等待硬盘驱动器),它仍将分配给浏览器进程。但这通常是您想要的:它没有缺点(它不会使系统的其余部分运行得更慢,浏览器只是更快地“完成”了它必须做的事情,从好的方面来说甚至可能节省能源平均值:当多个 CPU 内核刚刚完成时,事情可以自动降频/挂起)。
我认为专注于找出它使用这么多 CPU 的原因,使用 Chromium 内置的 Taskmanager 来查找哪个选项卡正在使用它,或者像性能图和火焰图这样的分析器可能会很有用。
但如果你真的想减慢浏览器的速度,你应该考虑使用现代内置解决方案 cgroups,例如参见:https : //forums.gentoo.org/viewtopic-t-1010870-start-0.html
或者考虑使用 (re)nice 降低铬的优先级,使用 AdBlockers 或升级您的硬件。
为什么 cpulimit 没有按预期工作可能是由于多个线程,当 sigstop 停止父进程时子进程没有停止,但我不确定。
更新:这个https://github.com/opsengine/cpulimit/issues/39和这个:/sf/ask/2213658821/ -allowed-to-use证实了我的怀疑,您可能没有限制所有子进程。较新版本的 cpulimit 提供了选项:--include-children
或:-i
为此。
归档时间: |
|
查看次数: |
1762 次 |
最近记录: |