プロセスを特定の時間/ CPUサイクルに制限できますか?


16

顧客のアクションによってトリガーされるWebサーバーで実行されるスクリプトがあり、Unixプロセスを開始してキャッシュファイルを生成します。このプロセスはお客様から提供されたファイルに基づいて動作するため、誤動作を引き起こし、それを生成するPHPプロセスがタイムアウトするほど長く実行されるか、システム管理者が殺すほどのCPU時間を使用します。

プロセスのCPU時間/実行時間を制限する実行可能なコマンドはありますか?のようなコマンドを探しています/usr/bin/time。そこで、そのコマンドを実行し、実行して制限するコマンドラインを渡すことができます。

回答:


13

Gillesの回答に加えて、実行時の変更を含め、必要な処理を正確に実行するcpulimitツールがあります。さらに、特定のCPU /コアIIRCのみに制限できます。


12

プログラム内から、を呼び出しますsetrlimit(RLIMIT_CPU, ...)。シェルから呼び出しますulimit -t 42(これは標準ではありませんが、ほとんどのUNIXバリアントでほとんどのシェル(bashとkshを含む)でサポートされています)。これにより、現在のプロセスがN秒のCPU時間を消費すると強制終了されます。制限は子プロセスに継承されます。一般的なシェルのイディオムは(ulimit -t 42; runaway_process)、後で同じシェルから他の無制限のプロセスを実行できるようにする場合です。

参照してください特定のプロセスがUNIXで使用できるメモリの量を制限する方法はありますか? 。原則は同じで、異なるリソースを制限するだけです。


問題は、私は追加することはできませんので、私はプログラムのソースコードを持っていない、ですsetrlimit...私はシェルを持っていないので、私はPHPを通してそれを生み出しています
ジョシュ

6
@Josh:に似た構造を探しているtime php /cgi/foo.php場合は、を使用できますbash -c 'ulimit -t 42; exec "$0" "$@"' php /cgi/foo.php
ジル「SO-悪であるのをやめる」

@Josh apache?また、私はこのようなものが広いセットシステム...することができると思う
xenoterracide

@xenoterracideはい、Apacheですが、すべてのApacheプロセスではなく、この1つのプロセスのみを制限したいです。Gillesのbash onelinerがうまくいくかもしれません!
ジョシュ

3

また、このtimeoutコマンドを使用して、プロセスが指定された時間より長く実行されるのをブロックすることもできます。

$ date
Mon May  6 07:35:07 EDT 2013
$ timeout 5 sleep 100
$ date
Mon May  6 07:35:14 EDT 2013

詳細については、タイムアウトのmanページを参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.