Amacım tek bir sunucuda 10000 eşzamanlı ssh s'nin çalışmasına izin vermektir .
Basitlik için localhost'a veriyorum:
for i in `seq 1 10000`; do
ssh localhost "echo ${i}; sleep 100" >>./info 2>>./log &
done
sleep 100
10000 ssh başladığında 1. ssh hala bağlantıda olduğundan emin olmak için 10000 eşzamanlı ssh s vardır.
İşte iki tür hata mesajı var:
1. ssh_exchange_identification: Connection closed by remote host
2. ssh_exchange_identification: read: Connection reset by peer
Aşağıdaki değişiklikleri yaptım:
- Gelen
/etc/security/limits.conf
ve/etc/security/limits.d/90-nproc.conf
set yumuşak ve sertnofile
&nproc
(?. -: hayır maksimum değerdir Güncelleme Bu maksimum olası değer hakkıdır 65535 1048576 ) - In
/etc/sysctl.conf
, ayarlayınkernel.pty.max = 65535
- In
/etc/ssh/sshd_config
, ayarlayınMaxStartups 10000
.
Bu değişiklikler 1000 eşzamanlı ssh s'yi tek bir sunucuda başarıyla çalıştırmama izin veriyor , ancak 2000 ve üstü ssh s için çalışmıyorlar .
Bazı insanlar için değeri değiştirmeyi önermişlerdir MaxSessions
(aslında kullanımı hakkında net değilim: çoklama davamı nasıl etkiler?), /proc/sys/net/core/netdev_max_backlog
Ve /proc/sys/net/core/somaxconn
hiçbir fark yaratmıyor gibi görünüyor.
Ayrıca, farklı sunuculara 10000 eşzamanlı ssh s ise hata yoktur (sorunlar sadece tek bir sunucuya ssh olduğunda ortaya çıkar ):
for i in `seq 1 10000`; do
j=$(( 1 + $i % 8 ))
ssh server-${j} "echo hi; sleep 100" >info-${j} 2>log-${j} &
done
Uzun süredir bu konuda takılıp kaldım.
Herhangi bir yardım derinden takdir edilecektir!
sleep 100s
yapar sanmıyorum. Ssh oturumunda değil, kendi makinenizde yürütülür.
error: reexec socketpair: Too many open files
, yani nofile
(yani 65535) önceki değeri yeterli olmaktan uzak olduğunu varsayalım . ControlMaster'ı tanımıyorum ama deneyeceğim, teşekkür ederim !! :)
ps axu | egrep "ssh|sleep" | grep -v grep
sadece listeler sleep 100s
, değil ssh
. Bence bu komutu değiştirmelisin ssh "echo hi; sleep 100s"
.
sleep 100
ssh ile gönderilen komutta olmalı, bu benim gerçek senaryomda olduğu gibi, ama burada bir yazım hatası yaptım. Ana yayını buna göre güncelledim. İşaret ettiğiniz için çok teşekkür ederim !!