并行:警告:没有更多文件句柄

并行:警告:没有更多文件句柄

我正在运行 GNU 并行,一段时间后我得到:

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

为了克服这个问题,应该向并行命令添加什么参数?

我更改limits.confunlimited,但后来我无法使用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"

答案1

为了避免在异常终止(认为或系统崩溃)后留下 tmp 文件kill -9,GNU Parallel 打开 tmp 文件并立即删除它们。但它使文件保持打开状态。

为了满足它的要求,--keep-order必须保持所有尚未打印的文件打开。因此,如果您有 1000000 个命令,并且命令 2 永远卡住,那么 GNU Parallel 将愉快地运行命令 3 及更高版本,但如果命令 2 没有解除卡住,那么 GNU Parallel 最终将耗尽文件句柄(它每个命令使用 4 个文件句柄)。工作)。

在你的情况下,你passPasswords_and_hosts可能会在某个时候陷入困境。在您的输出中,它将是上次输出之后的作业(即尚未打印的作业)。

因此,请尝试手动运行该作业,看看是否存在一些明显的问题。

您也可以删除-k.然后,您的卡住作业仍将使用 4 个文件句柄,但所有后续完成的作业将不会使用,因为它们将在完成后打印。

最后就可以使用了--timeout。我通常使用--timeout 1000%.这意味着如果一项工作花费的时间超过 10 倍中位数所有成功作业的运行时间,然后它被杀死。它适用于各种不同的情况。

相关内容