「cpulimit」がChromiumブラウザを制限しないのはなぜですか?

「cpulimit」がChromiumブラウザを制限しないのはなぜですか?

cpulimitCPU使用率が高いので、Chromium Webブラウザの速度を調整し、端末を使って実行したいと思います。

cpulimit -l 30 -- chromium --incognito

ただし、期待どおりにCPU使用率を制限しません(たとえば、最大制限は30%)。 100%再利用できます。なぜ?私は何が間違っていましたか?

答え1

はい、Chromiumはスレッドの1つを停止してもあまり気にしません。

cpulimit2021年には本当に使いたいツールではありませんが、特に対話型ソフトウェアには適していません。シグナルでプロセスを停止して再開して、プロセスを「調整」します(またはあなたの場合は失敗します)。まあ。これは、オーディオやビデオの処理やスムーズなスクロールを試みる可能性が高いため、最新のブラウザでは実際に望ましくない不安定性を引き起こす恐ろしいハッキングです。

良いニュースは、実際には必要ないということです。 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の使用頻度が高い理由を見つけることに集中したり、Chromeに組み込まれているタスクマネージャを使用してどのタブが使用しているのかを調べたり、パフォーマンスやフレームグラフなどのプロファイラが役に立つと思います。

しかし、本当にブラウザを遅くしたい場合は、cgroupなどの最新の組み込みソリューションを検討する必要があります。たとえば、次のようになります。https://forums.gentoo.org/viewtopic-t-1010870-start-0.html

または、(再)niceを使用してChromeの優先順位を下げるか、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

関連情報