
同じ名前のプロセスが多数あり、CPU 時間の 100% を占めています。これを 50% 以下に抑えたいです。
追加のソフトウェアをインストールせずにこれを実行するにはどうすればよいですか?
答え1
これを実現するカーネルレベルのメカニズムについては、Linuxについて調べる必要があります。コントロールグループこれはまだ活発に開発が行われている分野なので、読んだ内容が現在使用しているカーネル(またはインストールしようとしているカーネル)と一致していることを確認する必要があります。
追加のインストールは不要とおっしゃっていますが、cgred
名前が一致するプロセスを CPU cgroup に自動的に移動するには、インストールすることを検討してください。Debian では、これはパッケージに含まれていますcgroup-bin
。
答え2
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 というプログラムがあります。
答え3
追加のソフトウェアをインストールしなくてもnice
、値の範囲は-20に19。
nice -20 some_command
与えるsome_command
最優先事項、 そして
nice 19 some_command
与えるsome_command
最低優先度。
答え4
上記のように、OOMキラーを支援するスクリプトとして、またはその使用を防ぐこともできます。
たとえば、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