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


11

実行する必要のあるアプリケーションのプロセスがありますが、最終的にはそのアプリケーションの実行に対してIOの使用量が多すぎます。そして、本当に私のコンピューターをクラッシュさせ、それが実行されている間、他のことをすることを不可能にします。

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

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


2
@GreatUncleBulgaria評判のポイントを手放したくないのでなければ、そうでもない。-あなたが求めるものに簡単な答えはちょうど他の人が提案し何組み合わせることである ionicerenice-そしておそらくulimit -s、コマンド、およびそれはそれです。
Sergiy Kolodyazhnyy

@GreatUncleBulgaria慣れてcgroups-ioいないので、何もわかりません:)
Sergiy Kolodyazhnyy

潜在的に関連する質問:askubuntu.com/q/538992/295286ここでの回答はcgroupについて言及していますが、それ以外はあまり言及していません。。。多分 ?
Sergiy Kolodyazhnyy

1
@SergiyKolodyazhnyy:誰かがコメントを整理したようです!

回答:


8

あなたはすべての組み合わせを使用する必要があり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再利用して、他のプログラムが使用していないディスクのみを使用するようにディスクアクセスを制限します

  3. CPUを制限する:

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

    プログラムのCPUは最大の25%に制限されています

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.