2013-05-02 71 views
2

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

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

+0

list_of_commands中有多少个作业?每台远程服务器有多少个核心? – 2013-05-03 12:39:31

+0

@ OleTange有500,000个工作。 100个远程服务器,每个32个核心。本地机器有16个内核。 – 2013-05-06 22:16:16

+0

发布'head -n 1000 list_of_commands |的输出parallel -D --eta --sshloginfile list_of_100_remote_computers.txt'到[email protected] – 2013-05-07 07:55:46

回答

0

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

按照Parallel MAN

--jobsÑ

-jÑ

--max-特效Ñ

-PÑ

jobslots的数量。并行运行最多N个作业。 0意味着尽可能多。默认值是100%,它将为每个CPU核心运行一个作业。

而且记住这一点:

当你开始使用-j选项不止一个工作,这是合理的 假设每个作业可能不采取确切的时间 等量去完成。如果您关心的是按照 文件名被呈现给Parallel(而不是它们的 完成时)的顺序看到输出,请使用--keeporder选项。

Parallel Multicore at the Command Line with GNU Parallel,管理杂志

+0

谢谢,我能够使用远程机器上的所有内核。这不是问题。我的问题是并行不会使用所有的远程机器。我试过了-j100,它发送了100个作业给16个远程机器。 – 2013-05-02 22:09:10

+0

啊,我的不好。你有没有试过 - 一次?根据文档 - “运行所有计算机上的所有作业--sshlogin' – OnoSendai 2013-05-02 22:14:38

+0

- 将所有命令发送到服务器,16台服务器运行同一作业。我需要分配命令并将它们唯一地发送给所有机器。 – 2013-05-03 21:27:01

0

如果远程机器是32个内核然后运行16点* 32的工作。默认情况下,GNU Parallel在总共16 * 32 * 2个文件句柄= 1024个文件句柄中使用STDOUT和STDERR的文件句柄。

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

如果--ungroup运行更多的工作,那么这就清楚地表明您已经达到了文件句柄限制。使用ulimit -n来增加限制。