web-dev-qa-db-ja.com

特定のプロセスのリソース使用量を制限する方法は?

実行する必要のあるアプリケーションのプロセスがありますが、最終的にはその処理に多すぎるIO使用量を使用してしまいます。そして、実際にコンピューターをクラッシュさせ、実行中に他のことを行うことができなくなります。

だから、特定のプロセスのIO使用量、RAMおよびCPUを制限する方法があるのだろうかと思っていましたか?そして、もちろんそのサブプロセス。

これは私のUbuntu 18.04 LTSシステム上にあります。

10
user364819

すべてのcgexeccpulimitおよびioniceの組み合わせを使用する必要があります。

  1. 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制御グループの下でプログラムを実行するため、これらのグループが制限を順守します。

  2. ディスクIOを制限します。

    Sudo ionice --class 3 --pid $(pgrep -f szMyProgram)
    

    上記のコマンドは、pgrep現在のコマンドラインの一部を再利用 とともに使用して、他のプログラムが使用していない場合にのみディスクを使用するようにディスクアクセスを制限しますit

  3. CPUを制限します。

    Sudo cpulimit --limit=25 --pid=!#:4
    

    プログラムのCPUは最大25%に制限されました

プログラムが最初に多くのCPUを使用しない場合、cpulimitの値を現在使用している値の半分以下に下げます。

8
Fabby