私のソフトウェアは、次のようなコマンドを実行します。
検索| xargsは、大量のメモリが必要な場合があることを行います。
問題は、時々多くのメモリを必要とする可能性があるタスクが不足しているため、システムが応答しなくなって再起動する必要があることです。私の理解は、これが予定を超えるメモリ割り当てによって引き起こされるということです。私が望むのは、xargsによって生成された操作が使用可能なメモリよりも多くのメモリを必要とする場合は終了し(それは問題ありません)、それがすべてであるということです。システム全体でオーバーコミットをオフにすると、この動作が発生する可能性がありますが、これはオプションではありません。プロセスを終了できますか?
心に浮かぶ一つの考えられる解決策は次のとおりです。
ulimit -v RAMサイズ
しかし、何かこれが良い考えではないと言いました。
ベストアンサー1
私はあなたが探しているのが--memfree
GNU Parallelだと思います。
find ... | parallel --memfree 1G dostuff
dostuff
1Gの空きRAMがある場合にのみ起動します。空きRAMが1G未満であるか、CPUスレッドごとに1つのジョブが実行されるまでもう1つ起動されます。 0.5G RAMの空き容量(1G RAMの50%)がある場合、最も若いジョブは終了します。したがって、メタコードでは次のようになります。
limit = 1G
while true:
if freemem > limit:
if count(running_jobs) < cpu.threads():
another_job.start()
if freemem < 0.5 * limit
youngest_job.kill()
一緒に使用すると、--retries 10
GNU Parallelに終了したジョブを10回再試行するように指示できます。
dostuff
メモリを消費するのに時間がかかる場合は、--delay 30s
次のタスクを作成する前に30秒待ってください。