Моя мета - дозволити 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, що є випадком у моєму фактичному сценарії, але я зробив друкарську помилку тут. Я відповідно оновив головну публікацію. Дуже дякую, що вказали на це !!