Linuxでプロセスの時間とメモリ使用量を制限する方法

タイムアウトスクリプトは、Linuxにおけるプロセスの時間とメモリ消費を制限するための有用なリソース監視プログラムです。これにより、制御下でプログラムを実行し、時間とメモリの制限を強制し、これらのパラメータが違反された場合はプログラムを終了します。

インストールは不要で、単にtimeoutプログラムを使用してコマンドとその引数を実行し、コマンドのメモリと時間の消費を監視し、プロセスが制限を超えた場合は中断し、事前定義されたメッセージで通知します。

このスクリプトを実行するには、LinuxシステムにPerl 5がインストールされており、/procファイルシステムがマウントされている必要があります。

LinuxシステムにインストールされているPerlのバージョンを確認するには、次のコマンドを実行します。

$ perl -v
Check Perl Version in Linux

次に、timeoutリポジトリをgitコマンドを使用してシステムにクローンし、cdコマンドを使用してローカルリポジトリに移動し、通常のLinuxコマンドとして起動します。

$ cd ~/bin
$ git clone https://github.com/pshved/timeout.git
$ cd timeout

では、timeoutスクリプトの動作を見てみましょう。基本的なメモリ制限(100Mの仮想メモリ):

基本的なメモリリミティング(仮想メモリ100M):

最初の例は、-mフラグを使用してプロセスのメモリ使用量を100Mの仮想メモリに制限する方法を示しています。メモリの単位のデフォルトはキロバイトです。

ここで、stress-ngコマンドは、10分間、利用可能なメモリの40%を使用する4つの仮想メモリストレッサ(VMS)を実行します。したがって、各ストレッサは利用可能なメモリの10%を使用します。

$ ./timeout -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m
Limiting Memory of Process

上記のtimeoutコマンドの出力を考慮すると、stress-ngのワーカープロセスは1.16秒後に終了しました。これは、VMSの合計メモリ消費量(438660キロバイト)が、stress-ngとその子プロセスの許可された仮想メモリ使用量を超えているためです。

プロセスの基本的な時間リミティング:

-tフラグを使用してプロセスの時間リミティングを有効にする方法を示します。

$ ./timeout -t 4 stress-ng --vm 4 --vm-bytes 40% -t 10m
Time Limiting of Process

上記の例では、stress-ngCPU+SYS時間が4を超えると、ワーカープロセスが終了します。

プロセスの時間とメモリの両方を制限する

次のように、メモリ時間の両方を一度に制限することもできます。

$ ./timeout -t 4 -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m

timeoutは、--detect-hangupsなどの高度なオプションもサポートしています。これにより、ハングアップ検出が有効になります。

$ ./timeout --detect-hangups -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m

RSS(Resident Set Size)メモリ制限は、--memlimit-rssまたは-sスイッチを使用して監視できます。

$ ./timeout -m 100000 -s  stress-ng --vm 4 --vm-bytes 40% -t 10m

また、プロセスの終了コードまたはシグナル+128を返すには、--confessまたは-cオプションを使用します。

$ ./timeout -m 100000 -c  stress-ng --vm 4 --vm-bytes 40% -t 10m

詳細や使用例については、timeout GitHubリポジトリを参照してください:https://github.com/pshved/timeout

次の関連記事も同様に役立つかもしれません:

  1. バッチモードでトップ15プロセスをメモリ使用量で検索する方法
  2. CPUTool – Linuxの任意のプロセスのCPU利用率を制限および制御する
  3. CPULimit Toolを使用してLinuxのプロセスのCPU使用率を制限する方法

timeoutスクリプトは、基本的にLinuxのプロセスの時間とメモリ消費を制限するシンプルなリソース監視プログラムです。timeoutスクリプトに関するフィードバックは、以下のコメントフォームからお寄せください。

Source:
https://www.tecmint.com/limit-time-and-memory-usage-of-linux-process/