プロセスがあまりにも多くのCPUを使用しないようにする(使用可能な場合でも)

プロセスがあまりにも多くのCPUを使用しないようにする(使用可能な場合でも)

あまりにも多くのCPUを使用する1つのプロセスを避けたい。実際には、DebianがインストールされているRaspberry Piで実行する必要がある非常に長いCPU要求タスク(ビデオ変換)があるため、CPUが過熱するのを防ぎたいと思います。温度が80℃以上に上昇します。

コマンドがあるのを見ましたが、cpulimitコマンドを実行する方法がわかりません。これは、bashコマンド自体ではなくpid(プロセスID)を引数として使用したり、実行するコードを含む実行可能ファイルとして使用したりするためです。 。私の仕事が何を返すかを自分で確認し、必要に応じてCtrl-Cを押すことができるようにしたいです。注:ジョブコマンドをファイルに入れて実行しようとするとcpulimit -l 20 --path=/path/to/my/file.sh返されるWarning: no target process found. Waiting for it...ため、1)--pathパラメータが実際に実行するアクション、2)CPUlimitコマンドを正しく使用する方法を理解できないようです。どの端末.. .

私はできます。好む 使用しないでください同様の回避策は、nohup my-command --my-args &2番目にpidを返し、それに対してcpulimitコマンドを書くことができるようにしても同じです。

よろしくお願いします!

答え1

ハードウェアの電源管理機能を活用

CPU温度を下げることが目標である場合は、CPUがより早く制限されるように電源管理パラメータを調整することをお勧めします。 Raspberry Piモデルによっては、温度を下げる必要があるかもしれませんtemp_soft_limitconfig.txtデフォルトは60℃のようです)。よりラズベリーパイドキュメントもっと学ぶ。

制御グループの使用

別のオプションは、cgroupを使用してプロセスが使用できるリソースの量を制限することです。 cgroupは作成できるサブプロセスも考慮し、デーモンにも適用できます。 CPU使用量を制限したい場合は、お気に入りのシェルがsed、awkなどのツールを作成するか、Chromeブラウザが各タブに対して別々のプロセスを作成すると仮定すると、CPUサイクル数に制限が設定されます。みんな影響を受けたcgroupのプロセスが燃焼する可能性があります。

次のように「cpulimit」という制御グループを作成できます。

$ sudo cgcreate -g cpu:/cpulimit

この制御グループのプロセス制限をCPU時間の20%に設定します。

$ sudo cgset -r cpu.cfs_period_us=1000000 cpulimit
$ sudo cgset -r cpu.cfs_quota_us=200000 cpulimit

アプリケーションを実行します。

$ sudo cgexec -g cpu:cpulimit <command>

答え2

二つの回答をさせていただきます。一つは役に立ちcpulimit、もう一つはもっと意味があります。

最初の答え:調整スクリプトを使用したい場合は、cpulimit以下のスクリプト内で個々のタスクを実行してみてはいかがですかcpulimit?たとえば、

#!/bin/dash
cpulimit --limit 20 -- ~/bin/mprime/mprime -t  # starts a slow mprime

代替答え:いくつかのxy質問をしました。 CPUに冷却時間を与えたいのですが、使用しているプログラムはプロセスをすばやく一時停止して再開してこれを実行します。

NOTES
    cpulimit always sends the SIGSTOP and SIGCONT signals to a process,
    both to verify that it can control it  and  to  limit  the  average
    amount  of  CPU it consumes ...

bashこれは、1行のコードで複製できる不正確なコピーだけでなく、プログラムを台無しにするcpulimit方法でファイル記述子を台無しにすることに注意してください。たとえば、対話型モードで最初の例をmprime実行すると、SIGKILL信号を手動で発行するまで端末にcpulimit --limit 20 -- ~/bin/mprime/mprime無限ループのプロンプトが表示されることがわかります。mprimecpulimitmprime

目標は、プロセッサにアイドル時間を与えることです。これを行う適切な方法は、プロセッサのクロック周波数を下げて何もせずにさらに時間を費やすことです。問題のデバイスはRaspberry Piなので、実行するのはそれほど難しくありません。

PS:Rui F Ribeiroの言葉は正しいです。プロセッサ集約的な作業を単一コアに制限すると、温度を低く保つのに役立ちます。同じ量の電力がまだ同じチップに注入されているため、プロセッサの冷却には役立ちません。したがって、コア間でプロセスを継続的に移動することは意味がありません。

関連情報