web-dev-qa-db-ja.com

実行中のプログラムがすべてのRAMとCPUを消費するのを防ぐ方法は?

Ubuntuのリソース管理に迷惑な問題があります。 Google Chromeブラウザーなどの一部のプログラムが100%のCPUとラップトップメモリ​​のほとんどを消費することがよくあります。

常にレスポンシブOSが必要です。つまり、プログラムを切り替えたり、画面上でマウスを動かしたり、ttyに切り替えてOSにコマンドを与えたりできるようにしたいということです。したがって、システムリソースの10%を予約するようにOSを構成する方法を探します。現在、Ubuntuはこのように動作しません。頻繁にchromeがすべてのCPUとメモリを消費し、その後システムが応答しなくなります。ボタン。

Ubuntuを常に応答するようにする方法はありますか?少なくとも、私はリソースに飢えたプログラムを殺すことができますか? (カーネルが最終的にいくつかのプログラムを強制終了してスペースを解放することを知っていますが、それをより速くするか、より多くのリソースを確保するように強制したいです)

Version: UBUNTU 14.04
~$ uname -a
Linux spielplatz 3.13.0-45-generic #74-Ubuntu SMP Tue Jan 13 19:36:28 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

CPU: Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
RAM: 8GB

更新(2017年10月8日)

私がこれまでに見つけた最良の解決策は、cgroupsを使用することです。 Gist があります。

5
Mehdi Sadeghi

以前にcpulimitを使用して、制御不能なCPUのハングリープログラムを「スロットル」しました(Xfce4 Mailwatchプラグインがハングアップし、100%CPUを取得することがあります)。 cpulimitは次のとおりです。

プロセスのCPU使用量を制限するためのツール

cpulimitは、プロセスのCPU使用率を制限しようとする単純なプログラムです(CPU時間ではなく、パーセンテージで表されます)。これは、大量のCPUを消費させたくない場合に、バッチジョブを制御するのに役立ちます。 Nice値やその他の優先度に基づいて動作するのではなく、実際のCPU使用率に基づいて動作します。
さらに、システム全体の負荷に動的かつ迅速に適応することができます。

ターゲットプロセスを監視し、「」「SIGSTOPシグナルとSIGCONTシグナルをプロセスに送信して、プロセスを制御できることを確認し、消費するCPUの平均量を制限します。」参照:

OSの他の部分の応答性が向上するはずですが、Firefoxで試してみたところ、応答性が大幅に低下する傾向があるため、Chromeブラウザーの最良の答えではないかもしれません。 Chrome自体を高速化する方法を検索することは、より有益な場合があります。

使用中のCPUとRAMの量、およびそれらを使用しているプロセスを確認する良い方法が必要な場合は、システム監視プログラム(tophtopなど)をお勧めします conky )、すべてのCPUまたはRAMを食べているものを見つけたら、閉じる/再起動することができます。


どのプログラムが最初に実行されるようにスケジューリングされるかを知りたい場合は、スケジューリングの優先順位と「適切さ」を調べてください。おそらく、Chromeを壊すことなく「より良い」行動にすることができます。
ここにinfo coreutils 'Nice invocation'からのクリップがあります:

'Nice'は、プロセスの "niceness"を出力するか、変更されたnicenessでコマンドを実行します。 「ナイスネス」は、システムでのプロセスの優先度に影響します。

Nicenessの値の範囲は、少なくとも-20(プロセスの優先度が高く、リソースを取得するため、他のプロセスの速度が低下します)から19(プロセスの優先度は低く、自身の実行は遅くなりますが、実行中の他のプロセスの速度への影響は小さくなります)。一部のシステムには、より広い範囲のniceness値があります。逆に、他のシステムはより制限の厳しい制限を実施する場合があります。サポートされている範囲外のナイスネスを設定しようとすると、サポートされる最小値または最大値を使用しようとする試みとして扱われます。

良い点とスケジューリングの優先順位を混同しないでください。これにより、アプリケーションはスレッドの実行をスケジュールする順序を決定できます。優先度とは異なり、ナイスネスはスケジューラへの単なるアドバイスであり、スケジューラは自由に無視できます。また、用語のポイントとして、POSIXは「ナイス値」という観点から「ナイス」の動作を定義します。これは、ナイスネスと最小ナイスネスの非負の差です。 「ナイス」はPOSIXに準拠していますが、そのドキュメントと診断では、歴史的な慣行との互換性のために「ナイスネス」という用語を使用しています。

そして、スケジューリングに関するいくつかの便利なリンクがあります


そしてmuruの コメント/投稿 on Cgroups(ArchWiki) は、RAMの制限については良さそうに見えますが、CPUコアと「共有」も制限できるようです( "デフォルトでは、すべてのグループには1024シェアがあります。100シェアのグループには、CPU時間の約10%の部分が割り当てられます")。

ArchWiki記事の最初の段落でもこの潜在的に有用なオプションについて言及していますが、それらは主にユーザー/グループを制限するためのものだと思います:man pam_limitsman limits.conf

3
Xen2050