修正:
sudo sysctl net.ipv4.tcp_tw_reuse=1
次に、mongoを再起動します。
または、/ etc / sysctl.confに追加することもできます(再起動時に実行されます):
net.ipv4.tcp_tw_reuse=1
次に、これを実行してリロードします(再起動せずに)
sudo sysctl -p /etc/sysctl.conf
この「修正」により、TCPソケット(サーバー全体)のタイムウェイト状態が無効になります。ですから、それは実際にはまったく修正ではありません。ただし、mongoがSO_LINGERを使用してtimewait状態を減らすまで、多数のサーバーソケットがTIME_WAIT状態でプールされ、新しい接続に使用できなくなります。これにより、TIME_WAITの接続数を確認できます:
netstat -an | grep TIME_WAIT | wc -l
これにより、約28kのTIME_WAIT接続で失敗することがわかりました。このカーネルフラグの使用:
sysctl net.ipv4.ip_local_port_range="18000 65535"
サーバーは45k接続で失敗します。したがって、エラーをより簡単に再現するために、範囲を200またはそれよりも小さい値に下げることができます。
したがって、このの結果は 結局のところ、プログラミングの質問(最後のリンクからわかるように):
http://alas.matf.bg.ac.rs /manuals/lspe/snode=105.html