我正在运行 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"
答案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 倍中位数所有成功作业的运行时间,然后它被杀死。它适用于各种不同的情况。