我试图将命令分发到 100 台远程计算机,但注意到命令只发送到 16 台远程计算机。我的本地机器有 16 个内核。为什么并行只使用 16 台远程计算机而不是 100 台?
并行 --eta --sshloginfile list_of_100_remote_computers.txt < list_of_commands.txt
我试图将命令分发到 100 台远程计算机,但注意到命令只发送到 16 台远程计算机。我的本地机器有 16 个内核。为什么并行只使用 16 台远程计算机而不是 100 台?
并行 --eta --sshloginfile list_of_100_remote_computers.txt < list_of_commands.txt
如果远程机器是 32 个核心,那么您运行 16*32 个作业。默认情况下,GNU Parallel 为 STDOUT 和 STDERR 使用一个文件句柄,总共 16*32*2 个文件句柄 = 1024 个文件句柄。
如果你有一个默认的 GNU/Linux 系统,你将达到 1024 个文件句柄的限制。
如果--ungroup
运行更多作业,则清楚地表明您已达到文件句柄限制。用于ulimit -n
增加限制。
我相信您需要指定要执行的并行作业的数量。
根据Parallel MAN:
--jobs N
-j N
--max-procs N
-PN
职位数量。最多并行运行 N 个作业。0 表示尽可能多。默认值为 100%,每个 CPU 核心将运行一项作业。
请记住这一点:
当您使用 -j 选项启动多个作业时,可以合理地假设每个作业可能不会花费完全相同的时间来完成。如果您关心按照文件名呈现给 Parallel 的顺序(而不是完成时)查看输出,请使用 --keeporder 选项。