2014-12-05 67 views
-1

對於性能問題和持續時間優化,我想知道誰限制了我的SSH連接數。Perl期望產卵限制

BASH腳本正在調用X Perl腳本。每個perl腳本產生一個新的SSH連接到一個不同的IP。

所以,這是它如何工作的:

max_proc_ssh=400 

while read codesite ip operateur hostname 
do 
    (sleep 3; /usr/bin/perl $DIR/RTR-sshscript.pl $codesite $ip $operateur $hostname) & 
     ((current_proc_ssh++)) 
    if [ $current_proc_ssh -eq $max_proc_ssh ]; then 
     printf "Pausing with $max_proc_ssh processes...\n" 
     current_proc_ssh=0 
     wait 
    fi 
done<<<"$temp_info" 

而且每RTR-sshscript.pl滋生了SSH連接的新期待和發送大量的命令,持續時間約3分鐘

$exp->spawn("ssh -o ConnectTimeout=$connectTimeout $user\@$ip") or die ("unable to spawn \n"); 

所以,與max_proc_ssh = 200我沒有問題。腳本進展順利。 但是當我要去與max_proc_ssh = 400時,Expect模塊無法處理它。它有時會告訴我**unable to spawn** 我會說,從400的預期來看,只有350個真正的開始,就像那樣。

這有什麼問題?我試圖定義一個sublimit以避免在同一時間推出400名預計,這樣的:

max_proc_ssh=400 
max_sublimit_ssh=200 

while read codesite ip operateur hostname 
do 
    (sleep 3; /usr/bin/perl $DIR/RTR-sshscript.pl $codesite $ip $operateur $hostname) & 
    ((current_proc_ssh++)) 
    ((current_sublimit_ssh++)) 
    if [ $current_sublimit_ssh -eq $max_sublimit_ssh ]; then 
     printf "Pausing sublimit SSH reached..." 
     sleep 3 
     current_sublimit_ssh=0 
    fi 
    if [ $current_proc_ssh -eq $max_proc_ssh ]; then 
     printf "Pausing with $max_proc_ssh processes...\n" 
     current_proc_ssh=0 
     current_sublimit_ssh=0 
     wait 
    fi 
done<<<"$temp_info" 

這將允許SSH推出200期待,然後再次啓動200之前等待3個secondes。 然後,等待所有400完成後再開始。

編輯:如評論部分所述,我添加了「$!」到錯誤消息,然後我有這個:

./../../../scripts/mynet/RTR-scan-snmp.sh: fork: retry: Resource temporarily unavailable 
./../../../scripts/mynet/RTR-scan-snmp.sh: fork: retry: Resource temporarily unavailable 
./../../../scripts/mynet/RTR-scan-snmp.sh: fork: retry: Resource temporarily unavailable 
./../../../scripts/mynet/RTR-scan-snmp.sh: fork: retry: Resource temporarily unavailable 
./../../../scripts/mynet/RTR-scan-snmp.sh: fork: retry: Resource temporarily unavailable 
./../../../scripts/mynet/RTR-scan-snmp.sh: fork: retry: Resource temporarily unavailable 
./../../../scripts/mynet/RTR-scan-snmp.sh: fork: retry: Resource temporarily unavailable 

這是什麼意思?我壓倒叉限制?我怎樣才能增加它? 通過修改sysctl.conf文件?

當我搜索了一下,他們說檢查什麼

sysctl fs.file-nr 

是說 但是,當我啓動腳本,它並沒有比這高走:

sysctl fs.file-nr 
fs.file-nr = 27904  0  793776 

使用ulimit對我的用戶來說是4096 但是當腳本啓動時,計數器會比這更高:

sudo lsof -u restools 2>/dev/null | wc -l 
25258 
+0

「無法釀出」不是ssh連接問題我不認爲。這聽起來更像是防止'ssh'開始的限制。看看你的'ulimit'?看看你的最大打開文件? – 2014-12-05 13:56:27

+0

無法產卵是我設定的消息,當期望DIE $ exp-> spawn(「ssh -o ConnectTimeout = $ connectTimeout $ user \ @ $ ip」)或死亡(「無法產卵\ n」); (見上面:)) – 2014-12-05 13:57:31

+0

好點。因此,請在該消息中包含實際的錯誤並查看實際失敗的內容? – 2014-12-05 14:00:13

回答

0

看來它不是一個進程限制,而是打開的文件限制。

添加這些行:

restools   soft nproc   2048 
restools   soft nofile   2048 

/etc/security/limits.conf文件解決了這個問題! 第一行限制活動過程中,以2048 數量和第二,打開的文件到2048 數他們兩人此前1024

測試及驗證