実行する必要のあるアプリケーションのプロセスがありますが、最終的にはその処理に多すぎるIO使用量を使用してしまいます。そして、実際にコンピューターをクラッシュさせ、実行中に他のことを行うことができなくなります。
だから、特定のプロセスのIO使用量、RAMおよびCPUを制限する方法があるのだろうかと思っていましたか?そして、もちろんそのサブプロセス。
これは私のUbuntu 18.04 LTSシステム上にあります。
すべてのcgexec
、cpulimit
およびionice
の組み合わせを使用する必要があります。
RAMおよびSWAPの制限:
Sudo cgcreate -g memory:/szMyGroup
echo $(( 512 * 1024 * 1024 )) | Sudo tee /sys/fs/cgroup/memory/szMyGroup/memory.limit_in_bytes
echo $(( 1024 * 1024 * 1024 )) | Sudo tee /sys/fs/cgroup/memory/szMyGroup/memory.memsw.limit_in_bytes
上記のコマンドは、szMyGroup
(たとえば、group-great-uncle
)という名前のコントロールグループを作成し、szMyGroup
の下で実行されるプロセスに最大512 MBの物理メモリと最大1024 MBの上限を設定します。スワップの次に:
Sudo cgexec -g memory:szMyGroup szMyProgram
szMyGroup
制御グループの下でプログラムを実行するため、これらのグループが制限を順守します。
ディスクIOを制限します。
Sudo ionice --class 3 --pid $(pgrep -f szMyProgram)
上記のコマンドは、pgrep
を 現在のコマンドラインの一部を再利用 とともに使用して、他のプログラムが使用していない場合にのみディスクを使用するようにディスクアクセスを制限しますit
CPUを制限します。
Sudo cpulimit --limit=25 --pid=!#:4
プログラムのCPUは最大25%に制限されました
プログラムが最初に多くのCPUを使用しない場合、cpulimitの値を現在使用している値の半分以下に下げます。