मेरा लक्ष्य एकल सर्वर पर 10000 समवर्ती ss को चलाने की अनुमति देना है।
सादगी के लिए मैं लोकलहोस्ट के लिए ssh-ing हूं:
for i in `seq 1 10000`; do
ssh localhost "echo ${i}; sleep 100" >>./info 2>>./log &
done
sleep 100
यह सुनिश्चित करने के लिए कि जब 10000 ssh शुरू होता है, तो 1 ssh अभी भी कनेक्शन में है इसलिए वास्तव में 10000 समवर्ती ssh हैं ।
और यहां मुझे दो प्रकार के त्रुटि संदेश मिले हैं:
1. ssh_exchange_identification: Connection closed by remote host
2. ssh_exchange_identification: read: Connection reset by peer
मैंने निम्नलिखित संशोधन किए हैं:
- में
/etc/security/limits.conf
और/etc/security/limits.d/90-nproc.conf
, सेट नरम और कठिनnofile
औरnproc
65535 के लिए (?। -: कोई अधिकतम मूल्य है अद्यतन इस अधिकतम संभव मूल्य सही है 1048576 ) - में
/etc/sysctl.conf
, सेट मेंkernel.pty.max = 65535
- में
/etc/ssh/sshd_config
, सेट मेंMaxStartups 10000
।
ये संशोधन मुझे एकल सर्वर पर 1000 समवर्ती ssh को सफलतापूर्वक चलाने की अनुमति देते हैं , लेकिन वे 2000 और उससे अधिक ssh s के लिए काम नहीं करते हैं ।
कुछ लोगों ने मूल्य बदलने का सुझाव दिया है MaxSessions
(वास्तव में मैं इसके उपयोग के बारे में स्पष्ट नहीं हूं: मल्टीप्लेक्सिंग मेरे मामले को कैसे प्रभावित करता है?), /proc/sys/net/core/netdev_max_backlog
और /proc/sys/net/core/somaxconn
, लेकिन उन्हें कोई फर्क नहीं पड़ता है।
इसके अलावा, वहाँ कोई त्रुटि है, तो वे कर रहे हैं 10000 समवर्ती ssh को रों अलग सर्वर (समस्याओं केवल तब होता है जब एक के लिए ssh एकल सर्वर):
for i in `seq 1 10000`; do
j=$(( 1 + $i % 8 ))
ssh server-${j} "echo hi; sleep 100" >info-${j} 2>log-${j} &
done
मैं इस पर काफी लंबे समय से अटका हुआ हूं।
किसी भी मदद की गहराई से सराहना की जाएगी!
sleep 100s
कि तुम क्या सोचते हो। यह ssh सत्र में निष्पादित नहीं होता है, बल्कि आपकी अपनी मशीन पर होता है।
error: reexec socketpair: Too many open files
, इसलिए मुझे लगता है कि पिछले मूल्य nofile
(65535) काफ़ी दूर था। मैं ControlMaster से परिचित नहीं हूँ, लेकिन मैं यह कोशिश करूँगा, धन्यवाद !! :)
ps axu | egrep "ssh|sleep" | grep -v grep
केवल एक सूची होती है sleep 100s
, न कि ssh
। मुझे लगता है कि आपको कमांड को बदलना चाहिए ssh "echo hi; sleep 100s"
।
sleep 100
ssh के माध्यम से भेजे गए कमांड में होना चाहिए, जो कि मेरी वास्तविक स्क्रिप्ट में मामला है, लेकिन मैंने यहाँ एक टाइपो बनाया है। मैंने अपने अनुसार मुख्य पोस्ट को अपडेट किया है। इसको इंगित करने के लिए बहुत बहुत धन्यवाद !!