タイムアウトスクリプトは、Linuxにおけるプロセスの時間とメモリ消費を制限するための有用なリソース監視プログラムです。これにより、制御下でプログラムを実行し、時間とメモリの制限を強制し、これらのパラメータが違反された場合はプログラムを終了します。
インストールは不要で、単にtimeoutプログラムを使用してコマンドとその引数を実行し、コマンドのメモリと時間の消費を監視し、プロセスが制限を超えた場合は中断し、事前定義されたメッセージで通知します。
このスクリプトを実行するには、LinuxシステムにPerl 5がインストールされており、/procファイルシステムがマウントされている必要があります。
LinuxシステムにインストールされているPerlのバージョンを確認するには、次のコマンドを実行します。
$ perl -v

次に、timeoutリポジトリをgitコマンドを使用してシステムにクローンし、cdコマンドを使用してローカルリポジトリに移動し、通常のLinuxコマンドとして起動します。
$ cd ~/bin $ git clone https://github.com/pshved/timeout.git $ cd timeout
では、timeoutスクリプトの動作を見てみましょう。
基本的なメモリリミティング(仮想メモリ100M):
最初の例は、-m
フラグを使用してプロセスのメモリ使用量を100Mの仮想メモリに制限する方法を示しています。メモリの単位のデフォルトはキロバイトです。
ここで、stress-ngコマンドは、10分間、利用可能なメモリの40%を使用する4つの仮想メモリストレッサ(VMS)を実行します。したがって、各ストレッサは利用可能なメモリの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
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。
次の関連記事も同様に役立つかもしれません:
- バッチモードでトップ15プロセスをメモリ使用量で検索する方法
- CPUTool – Linuxの任意のプロセスのCPU利用率を制限および制御する
- CPULimit Toolを使用してLinuxのプロセスのCPU使用率を制限する方法
timeoutスクリプトは、基本的にLinuxのプロセスの時間とメモリ消費を制限するシンプルなリソース監視プログラムです。timeoutスクリプトに関するフィードバックは、以下のコメントフォームからお寄せください。
Source:
https://www.tecmint.com/limit-time-and-memory-usage-of-linux-process/