2013-05-02 68 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來增加限制。