Naprawiono to:
sudo sysctl net.ipv4.tcp_tw_reuse=1
Następnie uruchom ponownie Mongo.
Alternatywnie możesz dodać go do /etc/sysctl.conf (aby był uruchamiany przy ponownym uruchomieniu):
net.ipv4.tcp_tw_reuse=1
Następnie uruchom to, aby ponownie załadować (bez konieczności ponownego uruchamiania)
sudo sysctl -p /etc/sysctl.conf
Ta „poprawka” wyłączy stan timewait dla gniazd TCP (w całym serwerze). Więc tak naprawdę to wcale nie jest poprawka. Jednak dopóki mongo nie zmniejszy swojego stanu timewait za pomocą SO_LINGER, duża liczba gniazd serwera będzie łączyć się w stanie TIME_WAIT i pozostanie bezużyteczna dla nowych połączeń. Możesz zobaczyć liczbę połączeń w TIME_WAIT:
netstat -an | grep TIME_WAIT | wc -l
Dzięki temu mogłem zobaczyć, że nie działa przy około 28 tysiącach połączeń TIME_WAIT. Używając tej flagi jądra:
sysctl net.ipv4.ip_local_port_range="18000 65535"
Serwer nie działa przy 45k połączeń. Tak więc, aby łatwiej odtworzyć błąd, możesz obniżyć zakres do 200 lub czegoś małego.
Tak więc wynik tego był w końcu pytanie dotyczące programowania (jak widać z ostatniego linku):
opcja TCP SO_LINGER (zero ) - kiedy jest to wymagane
http://alas.matf.bg.ac.rs /manuals/lspe/snode=105.html