2

我试图将命令分发到 100 台远程计算机,但注意到命令只发送到 16 台远程计算机。我的本地机器有 16 个内核。为什么并行只使用 16 台远程计算机而不是 100 台?

并行 --eta --sshloginfile list_of_100_remote_computers.txt < list_of_commands.txt

4

2 回答 2

0

如果远程机器是 32 个核心,那么您运行 16*32 个作业。默认情况下,GNU Parallel 为 STDOUT 和 STDERR 使用一个文件句柄,总共 16*32*2 个文件句柄 = 1024 个文件句柄。

如果你有一个默认的 GNU/Linux 系统,你将达到 1024 个文件句柄的限制。

如果--ungroup运行更多作业,则清楚地表明您已达到文件句柄限制。用于ulimit -n增加限制。

于 2013-07-14T18:58:53.503 回答
0

我相信您需要指定要执行的并行作业的数量。

根据Parallel MAN

--jobs N

-j N

--max-procs N

-PN

职位数量。最多并行运行 N 个作业。0 表示尽可能多。默认值为 100%,每个 CPU 核心将运行一项作业。

请记住这一点:

当您使用 -j 选项启动多个作业时,可以合理地假设每个作业可能不会花费完全相同的时间来完成。如果您关心按照文件名呈现给 Parallel 的顺序(而不是完成时)查看输出,请使用 --keeporder 选项。

使用 GNU Parallel 的命令行上的并行多核,管理杂志

于 2013-05-02T21:55:32.360 回答