ウェブサイト検索

Linuxにおけるプロセスの時間およびメモリ使用量を制限する方法


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

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

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

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

$ perl -v

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

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

それでは、タイムアウトスクリプトがどのように機能するかを見てみましょう。

基本メモリ制限(100Mの仮想メモリ):

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

ここで、stress-ngコマンドは、利用可能なメモリの40%を10分間使用する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

タイムアウトは、ハングアップ検出を有効にする --detect-hangups のような高度なオプションもサポートしています。

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

メモリ制限の RSS (常駐セットサイズ) を --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. バッチモードで‘top’を使用してメモリ使用量によるトップ15プロセスを見つける方法
  2. CPUTool - Linuxにおける任意のプロセスのCPU利用率の制限と制御
  3. LinuxでCPULimitツールを使用してプロセスのCPU使用率を制限する方法

タイムアウトスクリプトは、基本的にLinuxのプロセスの時間とメモリ消費を制限するシンプルなリソース監視プログラムです。以下のコメントフォームを通じて、タイムアウトスクリプトに関するフィードバックをお寄せいただけます。

関連記事: