スクリプトがシステムリソースを使い果たし、システム全体がクラッシュするのを防ぎます。

スクリプトがシステムリソースを使い果たし、システム全体がクラッシュするのを防ぎます。

これを行うための「正式な」方法があるかどうか疑問に思います。

背景と説明

ライブサーバーにいくつかのプログラムをインストールする必要があります。私はベンダー(FOSS、Github、複数の作者...)を信頼していますが、スクリプトが問題を引き起こし、システムリソースを消費し、サーバーが応答しなくなる完全に不可能ではないシナリオを避けたいと思います。 amavisがインストールされ、インストール直後に開始されましたが、いくつかの誤った設定のために平均負荷が4を超え、システムがほとんど応答しない状況がありました。

私の最初の教えはnice-でしたnice -n 19 thatscript.sh。これは役に立つかもしれないし、そうではないかもしれませんが、次のようなスクリプトを書いてアクティブにする方が良いと思います。

  • デーモンで実行(例)500ms-2s

  • psとマーク付きのプロセスを確認してください。grep

  • 表示されたプロセス(または他のプロセス)があまりにも多くのCPUを使用している場合(まだ定義されていない)、そのプロセスを終了します。SIGKILL

2番目のレッスンは、私が車輪を再発明したのは今回が初めてではないということです。

もしそうなら、プログラムとプログラムが生成するプロセスを事前定義された限られた量のシステムリソースに「閉じる」か、特定のしきい値に達すると自動的にシャットダウンする良い方法はありますか?

ベストアンサー1

選択肢 #1: monit を使用したプロセスのモニタリング

インストールするメディア/モニタリングそして、このテンプレートに基づいて構成ファイルを作成します。

check process myprogram
matching "myprogram.*"
start program = "/usr/bin/myprogram" with timeout 10 seconds
stop program = "/usr/bin/pkill thatscript"
if cpu > 99% for 2 cycles then stop
if loadavg (5min) > 80 for 10 cycles then stop

代替案 #2: cgroup を使用したプロセス CPU 使用量の制限

最も基本的なLinux専用ソリューションの1つです。多くのオプションと複雑さを提供します。

例:

sudo cgcreate -g cpu:/cpulimited
sudo cgset -r cpu.shares=512 cpulimited
sudo cgexec -g cpu:cpulimited /usr/bin/myprogram > /dev/null &

次の内容をもっと読んでください。

DigitalOcean - 方法:CentOS 6でcgroupを使用してリソースを制限する

RedHat - リソース管理ガイド

Oracle - cgroupsサブシステムのリスト

回避策#3:CPUlimitを使用してプロセスCPU使用率を制限します。

選択したパッケージマネージャから最新バージョンのcpulimitを入手するか、利用可能なソースを取得します。GitHub

CPU使用率を90%に制限します。cpulimit -l 90 /usr/bin/myprogram > /dev/null &

注:

特定のCPUコアを使用するようにプロセスを固定することで、常に空きCPU性能を確保できます。

おすすめ記事