Gnu-Parallel

並行:警告:沒有更多的文件句柄

  • December 18, 2020

我正在執行 GNU 並行,一段時間後我得到:

parallel: Warning: no more file handles Raising ulimit -n or etc/security/limits.conf may help.

為了克服這個問題,什麼參數適合添加到並行命令中?

我改為limits.confunlimited後來我無法使用sudo或登錄到我的盒子rootssh我的盒子同樣的問題像這裡

這是我正在使用的一段程式碼。我有 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 倍,那麼它就會被殺死。*它適用於各種各樣的情況。

引用自:https://unix.stackexchange.com/questions/624952