私の目標は、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があります。同時に SSHS.
以下は、私が受け取った2つのエラーメッセージです。
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以降では機能しません。SSHS.
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 を割り当てるために必要になります (通常は正確なユースケースなどを指定していませんが)。 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