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