Linux でプロセスの時間とメモリ使用量を制限する方法
タイムアウトスクリプトは、Linux のプロセスの時間とメモリ消費を制限するための便利なリソース監視プログラムです。これにより、プログラムを制御下で実行し、時間とメモリの制限を強制し、これらのパラメータに違反した場合にプログラムを終了することができます。
インストールは必要ありません。タイムアウトプログラムを使用してコマンドをその引数とともに実行するだけで、コマンドのメモリと時間の消費が監視され、制限を超えた場合にはプロセスが中断され、事前定義されたメッセージで通知されます。メッセージ。
このスクリプトを実行するには、Linux システムにPerl 5 がインストールされ、/proc ファイルシステムがマウントされている必要があります。
Linux システムにインストールされているPerl のバージョンを確認するには、次のコマンドを実行します。
perl -v
次に、git コマンドを使用してシステムにタイムアウトリポジトリのクローンを作成し、cd コマンドを使用してローカル リポジトリに移動し、通常の Linux コマンドとして呼び出します。
cd ~/bin
git clone https://github.com/pshved/timeout.git
cd timeout
ここでタイムアウトスクリプトがどのように機能するかを見てみましょう。
基本的なメモリ制限 (100M の仮想メモリ):
この最初の例では、-m
フラグを使用して、プロセスのメモリ使用量を仮想メモリの 100M に制限する方法を示します。メモリのデフォルトの単位はキロバイトです。
ここで、stress-ng コマンドは 4 つの仮想メモリ ストレッサー (VMS) を実行し、それらを組み合わせて使用可能なメモリの40%を 10 分間使用します。したがって、 各ストレッサーは利用可能なメモリの10%を使用します。
./timeout -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m
上記のtimeout コマンドの出力を考慮すると、stress-ng ワーカー プロセスはわずか1.16 秒後に終了しました。これは、VMS の合計メモリ消費量 (438660 キロバイト) が、stress-ng とその子に許可されている仮想メモリ使用量を超えているためです。プロセス。
プロセスの基本的な時間制限:
プロセスの時間制限を有効にするには、次のように -t
フラグを使用します。
./timeout -t 4 stress-ng --vm 4 --vm-bytes 40% -t 10m
上記の例では、stress-ng のCPU+SYS 時間が定義された値 4 を超えると、ワーカー プロセスが強制終了されます。
プロセスの時間とメモリの両方を制限する
次のようにメモリと時間の両方を同時に制限することもできます。
./timeout -t 4 -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m
タイムアウトは、ハングアップの検出を有効にする --detect-hangups
などのいくつかの高度なオプションもサポートしています。
./timeout --detect-hangups -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m
--memlimit-rss
または -s
スイッチを使用して、RSS (常駐セット サイズ) のメモリ制限を監視できます。 。
./timeout -m 100000 -s stress-ng --vm 4 --vm-bytes 40% -t 10m
さらに、プロセスの終了コードまたは signal+128 を返すには、次のように --confess
または -c
オプションを使用します。
./timeout -m 100000 -c stress-ng --vm 4 --vm-bytes 40% -t 10m
詳細と使用例については、タイムアウト Github リポジトリ: https://github.com/pshved/timeout を参照してください。
次の関連記事も同様に役立つ場合があります。
- バッチモードで「top」を使用してメモリ使用量の上位 15 プロセスを検索する方法
- CPUTool – Linux のあらゆるプロセスの CPU 使用率を制限および制御
- CPULimit ツールを使用して Linux でプロセスの CPU 使用量を制限する方法
タイムアウトスクリプトは、Linux のプロセスの時間とメモリ消費を基本的に制限する単純なリソース監視プログラムです。以下のコメント フォームからタイムアウトスクリプトに関するフィードバックをお寄せください。