내 목표는 10000 동시성을 허용하는 것입니다SSH운영 중하나의섬기는 사람.
작업을 단순하게 유지하기 위해 SSH를 통해 localhost에 연결합니다.
for i in `seq 1 10000`; do
ssh localhost "echo ${i}; sleep 100" >>./info 2>>./log &
done
sleep 100
10,000번째 SSH가 시작될 때 첫 번째 SSH가 여전히 연결되어 있는지 확인하는 것입니다. 따라서 실제로 10,000개의 SSH가 있습니다.동시에 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단일 서버에 있지만 2000 이상에서는 작동하지 않습니다.SSH에스.
MaxSessions
/proc/sys/net/core/netdev_max_backlog
어떤 사람들 은 및 값을 변경하자고 제안했지만(실제로 사용법이 명확하지 않습니다. 멀티플렉싱이 내 경우에 어떤 영향을 미칩니까?), /proc/sys/net/core/somaxconn
아무런 차이가 없는 것 같습니다.
또한 10,000 동시성에서는 오류가 보고되지 않습니다.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
나는 오랫동안 이 문제에 갇혀 있었습니다.
어떤 도움이라도 대단히 감사하겠습니다!
답변1
/그가 댓글을 달았으면 좋겠다
sshd는 각 로그인에 대해 pty를 할당하기 위해 (일반적으로 정확한 사용 사례 등을 지정하지 않았지만) 필요하지만 귀하의 경우 ssh "echo hi; sleep 100s"는 pty를 할당하지 않으므로 커널이 없습니다. pty는 .max 설정이 필요합니다...수천 명의 사용자를 원하지 않는 한녹음됨in*... 이를 테스트하려면 테스트에 -t 옵션을 추가해야 합니다. ssh -t "echo hi; 100초 동안 잠자기"
Jessie 시스템으로의 Wheezy dist 업그레이드 테스트로 돌아가서 error: reexec socketpair: Too many open files
/etc/security/limit*가 sshd의 제한을 변경하지 않는다는 것을 발견했습니다.
내 경우에는 /etc/security/limits.conf에서 설정한 후 확인하십시오 cat /proc/<pid-of-sshd>/limits
. * nofile Soft 65535 * nofile hard 65535는 여전히 sshd 제한의 1024(소프트) 및 4096(하드)만 보고합니다. 해결책은 ulimit 명령을 사용하여 스크립트 내에서 &를 강제로 사용하는 것 같습니다 ulimit -Hn 65535
. sshd의 nofiles를 1024/4096에서 65535/65535로 늘렸습니다.ulimit -n 65535
/etc/init.d/ssh
답변2
/etc/security/limits.conf 등이 작동하지 않는 이유는 PAM(시스템 서비스 아님)을 통해 로그인한 사용자에게만 적용되기 때문입니다.
서비스 제한을 설정하려면 (예: Ubuntu 20) /etc/systemd/system.conf를 편집하고 다음과 같은 줄을 추가할 수 있습니다.
DefaultLimitNOFILE=<Soft Limit>:<Hard Limit>
sshd 데몬을 다시 시작하는 것만으로는 충분하지 않은 것 같습니다. 새 설정은 시스템을 재부팅한 후에만 적용됩니다(또는 "sudo systemctl daemon-reload" 실행).
자세한 내용은 여기를 참조하세요: https://medium.com/@shihtiy.tw/linux-max-open-file-limit-with-system-service-ca8ff2562d1c