Linuxのリソース(CPU時間とメモリ)の制限と違反の場合のプロセスの終了

Linuxのリソース(CPU時間とメモリ)の制限と違反の場合のプロセスの終了

質問:

プロセスが与えられると、そのプロセスとそのサブプロセスが使用できるリソースを制限します。つまり、CPU時間と仮想メモリクォータを設定します。プロセスグループが制限の1つを超えるとそれを終了し、そうでない場合は使用したCPU時間と仮想メモリの量を印刷します。

特定のユースケース:

デフォルトでは、ファイルの入力を必要とする複数のバイナリを実行する必要がありますが、実行が厳密に制限されていることを確認する必要があります。たとえば、バイナリは256MB以下のメモリを割り当て、0.5秒以内に実行する必要があります。ただし、使用するメモリとCPUの量に関する情報が必要です。

私が試したこと:

  1. 最近これを扱っています。このPerlスクリプト、これまでに見つけた最高のソリューションです。残念ながら、メモリの問題があり、正確ではありません。このスクリプトの公式作者の投稿もあります。ここ
  2. 私は間違いなくCPU時間クォータを処理するのに役立ちますが、仮想メモリ制限違反のためプロセスを終了しない/usr/bin/timeout Linuxツールを試しました。timeout
  3. を使用してみましたが、前述したようulimitに、制限はもちろん、リソース消費に関するフィードバックも必要です。

質問:

この問題をどのように解決できますか? 。

答え1

これ制限設定(2)syscallはリソース制限(CPU時間 - 整数秒であるため、少なくとも1秒 - RLIMIT_CPU、ファイルサイズRLIMIT_FSIZE、アドレススペースRLIMIT_ASなど)に関連しています。設定することもできます。ディスククォータ。これちょっと待ってください4(2)システムコールは、特定のリソースの使用について通知し、フィードバックを提供します。そして工程(5)もっと教えてください。ルサッハを入手(2)SIGSTOPgetrusage(呼び出しまたはクエリを使用してプロセスグループ全体を定期的に停止し、/proc/$PID/そのプロセスグループにSIGCONT「続行」または「終了」を送信するいくつかのモニタを作成できます)。SIGTERM

これウォールグリーンこのツールはLinuxで非常に便利で、メモリリークを見つけるのに役立ちます。そしてトラック(1)それも役に立ちます。

問題のソフトウェアを再コンパイルできる場合は、最新バージョンの-fsanitize=address他のオプションを検討してください-fsanitize=undefined-fsanitize=湾岸協力協議会翻訳者。

たぶんあなたに少しいるかもしれません。バッチ処理。バッチモニタを探すか、C、Python、Ocaml、Perlなどで直接書いてください(コマンドを分岐してループで監視します...)。おそらくプロセス会計が必要な場合があります(参照アカウント(5)&社(8)...)

「使用されたメモリ量」(プログラムは通常、実行中にカーネルにメモリを割り当てて解放しますmmap)と「CPU時間」(参照:munmap時間(7)、マルチスレッドプログラムについて考えてください...)は非常にあいまいな概念です。

また、見ることができますポリアクリルアミドおそらく以下を設定してください/etc/security/イノティファイ(7)役に立つかもしれませんが、そうではないかもしれません。

また読んでください高度なLinuxプログラミングそしてシステムコール(2)

関連情報