Gnu-Parallel
並行:警告:沒有更多的文件句柄
我正在執行 GNU 並行,一段時間後我得到:
parallel: Warning: no more file handles Raising ulimit -n or etc/security/limits.conf may help.
為了克服這個問題,什麼參數適合添加到並行命令中?
我改為
limits.conf
但unlimited
後來我無法使用sudo
或登錄到我的盒子root
或ssh
我的盒子同樣的問題像這裡這是我正在使用的一段程式碼。我有 2 個文件,一個帶有密碼,第二個帶有主機。
passPasswords_and_hosts() { `sudo sshpass -p "$1" ssh -o ConnectTimeout=2 root@"$2" -o StrictHostKeyChecking=no "$command_linux"` } export -f testone export -p command_linux parallel --tag -k passPasswords_and_hosts :::: "$passwords" "$linux_hosts"
為避免在異常終止(想想
kill -9
或系統崩潰)後留下 tmp 文件,GNU Parallel 會打開 tmp 文件並立即刪除它們。但它使文件保持打開狀態。為了滿足
--keep-order
它的要求,必須保持所有尚未列印的文件處於打開狀態。因此,如果您有 1000000 個命令並且命令 2 永遠卡住,那麼 GNU Parallel 將愉快地執行命令 3 及以後,但如果命令 2 沒有解開,那麼 GNU Parallel 最終將用完文件句柄(它每個使用 4 個文件句柄工作)。在您的情況下,您
passPasswords_and_hosts
可能會在某個時候陷入困境。在您的輸出中,它將是最後一個輸出之後的作業(即尚未列印的作業)。所以嘗試手動執行該作業,看看是否有一些明顯的問題。
您也可以刪除
-k
. 然後您的卡住作業仍將使用 4 個文件句柄,但所有以下完成的作業都不會,因為它們將在完成後列印。最後你可以使用
--timeout
. 我通常使用--timeout 1000%
. 這意味著如果一個作業花費的時間超過所有成功作業的執行時間*中位數的 10 倍,那麼它就會被殺死。*它適用於各種各樣的情況。