私は同じ名前のプロセスをたくさん持っています-それらは私のCPU時間の100%を占めます、私はこれが50%以下であることを望みます。
追加のソフトウェアをインストールせずにこれを行うにはどうすればよいですか?
このためのカーネルレベルのメカニズムについては、Linuxで調べる必要があります コントロールグループ 。これはまだ活発に開発されている領域であるため、読んだ内容が現在のカーネルと一致している(またはインストールする意思がある)ことを確認する必要があります。
追加のものをインストールしないと言ったとしても、cgred
をインストールして、名前が一致するプロセスをCPUcgroupに自動移動することを検討してください。 Debianでは、これはcgroup-bin
パッケージ。
これは、STOPおよびCONT信号を使用して、bash Shell、sleep、pgrep、およびpkillコマンドで実行できます。
次のワンライナーは、プロセスが利用可能な合計CPU時間の最大50%を使用するようにします。 100ミリ秒ごとに実行され、その後さらに100ミリ秒停止されます。
while [ True ]; do pkill -STOP processname; sleep 0.1s; pkill -CONT processname; sleep 0.1s; done
読みやすくするために同じコードを複数行に分割します。
while [ True ]
do pkill -STOP processname
sleep 0.1s
pkill -CONT processname
sleep 0.1s
done
プロセス名パターンを作成するプロセスがどれだけ存在するかは関係ありません。すべてが同時に停止および継続されるため、CPU使用率の50%を超えることはできません。つまり、プロセスが存在する場合、それらの間で利用可能なCPU時間を共有する必要があります。アクティブ。これにより、制限が確実に満たされます。
ほぼ同じことをするcpulimitと呼ばれるプログラムがあります。
追加のソフトウェアをインストールしなくても、Nice
があります。値の範囲は-2から19です。
Nice -20 some_command
some_command
the 最高の優先度を与え、そして
Nice 19 some_command
some_command
the 最低優先度を与えます。
上記のように、OOM-killerを支援したり、その使用を防止したりするためのスクリプトとして使用できます。
cPU全体がx分間で75%に達したときに、pkill.shを実行すると言います。
../scripts/boottime/OOMkiller.sh
while [ true] ;
do inxi -tcm5 > ~/cpu.log
sleep 0.5s
inxi -tcm5 >> ~/cpu/log | diff -m > ~/offender.log
done
for i in offender.log ;
do ./scripts/pkill.sh
done
../scripts/pkill.sh
while [true]
do pgrep $(i) -STOP $PID
pkill -STOP $PID
sleep 0.5s
pkill -CONT $PID
done