Моя мета - дозволити 10000 одночасних ssh s працювати на одному сервері.
Для простоти я прихиляюсь до localhost:
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встановіть soft & hardnofile&nprocна 65535 (це максимально можливе значення? - Оновлення: ні. Максимальне значення - 1048576 ) - В
/etc/sysctl.conf, встановитиkernel.pty.max = 65535 - В
/etc/ssh/sshd_config, встановитиMaxStartups 10000.
Ці зміни дозволяють мені успішно запускати 1000 одночасних ssh s на одному сервері, але вони не працюють для 2000 і вище ssh s.
Деякі люди пропонують змінити значення для MaxSessions( на самом деле я не ясно , про його використанні: як це мультиплексування впливає на мій випадок), /proc/sys/net/core/netdev_max_backlogі /proc/sys/net/core/somaxconn, але вони , здається , не має ніякого значення.
Крім того, немає помилок, якщо вони одночасно 10000 ssh s на різних серверах (проблеми виникають лише при 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, а не the ssh. Я думаю, ви повинні змінити команду на ssh "echo hi; sleep 100s".
sleep 100повинні бути в команді, що надсилається через ssh, що є випадком у моєму фактичному сценарії, але я зробив друкарську помилку тут. Я відповідно оновив головну публікацію. Дуже дякую, що вказали на це !!