我試圖將命令分發到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
我相信你將需要指定要執行並行作業的數量。
按照Parallel MAN:
--jobsÑ
-jÑ
--max-特效Ñ
-PÑ
jobslots的數量。並行運行最多N個作業。 0意味着儘可能多。默認值是100%,它將爲每個CPU核心運行一個作業。
而且記住這一點:
當你開始使用-j選項不止一個工作,這是合理的 假設每個作業可能不採取確切的時間 等量去完成。如果您關心的是按照 文件名被呈現給Parallel(而不是它們的 完成時)的順序看到輸出,請使用--keeporder選項。
Parallel Multicore at the Command Line with GNU Parallel,管理雜誌
謝謝,我能夠使用遠程機器上的所有內核。這不是問題。我的問題是並行不會使用所有的遠程機器。我試過了-j100,它發送了100個作業給16個遠程機器。 – 2013-05-02 22:09:10
啊,我的不好。你有沒有試過 - 一次?根據文檔 - 「運行所有計算機上的所有作業--sshlogin' – OnoSendai 2013-05-02 22:14:38
- 將所有命令發送到服務器,16臺服務器運行同一作業。我需要分配命令並將它們唯一地發送給所有機器。 – 2013-05-03 21:27:01
如果遠程機器是32個內核然後運行16點* 32的工作。默認情況下,GNU Parallel在總共16 * 32 * 2個文件句柄= 1024個文件句柄中使用STDOUT和STDERR的文件句柄。
如果您有一個默認的GNU/Linux系統,您將達到1024個文件句柄限制。
如果--ungroup
運行更多的工作,那麼這就清楚地表明您已經達到了文件句柄限制。使用ulimit -n
來增加限制。
list_of_commands中有多少個作業?每臺遠程服務器有多少個核心? – 2013-05-03 12:39:31
@ OleTange有500,000個工作。 100個遠程服務器,每個32個核心。本地機器有16個內核。 – 2013-05-06 22:16:16
發佈'head -n 1000 list_of_commands |的輸出parallel -D --eta --sshloginfile list_of_100_remote_computers.txt'到[email protected] – 2013-05-07 07:55:46