Xargs
防止機器因記憶體不足而變慢
我的軟體執行的命令類似於:
查找 | xargs 做了一項潛在的記憶體消耗工作
問題是,有時可能需要記憶體的工作變得太餓了,系統變得無響應,我必須重新啟動它。我的理解是,這是由於記憶體分配超過承諾而發生的。我想要發生的是,如果 xargs 生成的作業需要比可用記憶體更多的記憶體,它就會死掉(我可以接受),就是這樣。我想如果我在系統範圍內關閉過度使用,我可以得到這種行為,但這不是一個選項。是否可以將其關閉以進行程序?
我正在考慮的一個可能的解決方案是設置
ulimit -v 記憶體大小
但有些事情告訴我這不是一個好主意。
我認為您正在尋找的是
--memfree
GNU Parallel:find ... | parallel --memfree 1G dostuff
這只會
dostuff
在有 1G RAM 可用時開始。它將再啟動一個,直到可用 RAM 少於 1G 或每個 CPU 執行緒執行 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 秒。