メモリ不足によるコンピュータ速度の低下を防ぐ

メモリ不足によるコンピュータ速度の低下を防ぐ

私のソフトウェアは、次のようなコマンドを実行します。

検索| xargsは、大量のメモリが必要な場合があることを行います。

問題は、時々多くのメモリを必要とする可能性があるタスクが不足しているため、システムが応答しなくなって再起動する必要があることです。私の理解は、これが予定を超えるメモリ割り当てによって引き起こされるということです。私が望むのは、xargsによって生成された操作が使用可能なメモリよりも多くのメモリを必要とする場合は終了し(それは問題ありません)、それがすべてであるということです。システム全体でオーバーコミットをオフにすると、この動作が発生する可能性がありますが、これはオプションではありません。プロセスを終了できますか?

心に浮かぶ一つの考えられる解決策は次のとおりです。

ulimit -v RAMサイズ

しかし、何かこれが良い考えではないと言いました。

答え1

私はあなたが探しているのが--memfreeGNU Parallelだと思います。

find ... | parallel --memfree 1G dostuff

dostuff1Gの空き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 10GNU Parallelに終了したジョブを10回再試行するように指示できます。

dostuffメモリを消費するのに時間がかかる場合は、--delay 30s次のタスクを作成する前に30秒待ってください。

答え2

sysctl vm.overcommit_memory 2

cgroupを避けたい場合

関連情報