Tujuan saya adalah untuk memungkinkan 10000 ssh berjalan bersamaan pada satu server.
Untuk kesederhanaan, saya ssh-ing ke localhost:
for i in `seq 1 10000`; do
ssh localhost "echo ${i}; sleep 100" >>./info 2>>./log &
done
sleep 100
adalah untuk memastikan ketika ssh ke-10.000 dimulai, ssh ke-1 masih terhubung sehingga memang ada 10.000 ssh bersamaan .
Dan inilah dua jenis pesan kesalahan yang saya dapat:
1. ssh_exchange_identification: Connection closed by remote host
2. ssh_exchange_identification: read: Connection reset by peer
Saya telah melakukan modifikasi berikut:
- Di
/etc/security/limits.conf
dan/etc/security/limits.d/90-nproc.conf
, atur lunak & kerasnofile
&nproc
ke 65535 (ini adalah nilai maksimum yang mungkin? - Pembaruan: tidak. Nilai maks adalah 1048576 ) - Di
/etc/sysctl.conf
, aturkernel.pty.max = 65535
- Di
/etc/ssh/sshd_config
, aturMaxStartups 10000
.
Modifikasi ini memungkinkan saya untuk berhasil menjalankan 1000 ssh s bersamaan ke satu server, tetapi mereka tidak berfungsi untuk 2000 dan di atas ssh s.
Beberapa orang menyarankan untuk mengubah nilainya MaxSessions
(sebenarnya saya tidak jelas tentang penggunaannya: bagaimana multiplexing mempengaruhi kasus saya?), /proc/sys/net/core/netdev_max_backlog
Dan /proc/sys/net/core/somaxconn
, tetapi mereka tampaknya tidak membuat perbedaan.
Selain itu, tidak ada kesalahan jika mereka 10.000 ssh bersamaan ke server yang berbeda (masalah hanya terjadi ketika ssh ke satu server):
for i in `seq 1 10000`; do
j=$(( 1 + $i % 8 ))
ssh server-${j} "echo hi; sleep 100" >info-${j} 2>log-${j} &
done
Saya sudah terjebak dalam hal ini cukup lama.
Bantuan apa pun akan sangat dihargai!
sleep 100s
apa yang Anda pikirkan. Itu dijalankan bukan di sesi ssh, tetapi di mesin Anda sendiri.
error: reexec socketpair: Too many open files
, jadi saya kira nilai sebelumnya nofile
(yaitu 65.535) masih jauh dari cukup. Saya tidak terbiasa dengan ControlMaster tetapi saya akan mencobanya, terima kasih !! :)
ps axu | egrep "ssh|sleep" | grep -v grep
hanya daftar sleep 100s
, bukan ssh
. Saya pikir Anda harus mengubah perintah ke ssh "echo hi; sleep 100s"
.
sleep 100
harus dalam perintah yang dikirim melalui ssh, yang merupakan kasus dalam skrip aktual saya, tapi saya membuat kesalahan ketik di sini. Saya telah memperbarui pos utama yang sesuai. Terima kasih banyak untuk menunjukkannya !!