Risolto:
sudo sysctl net.ipv4.tcp_tw_reuse=1
Quindi, riavvia mongo.
In alternativa, puoi aggiungerlo a /etc/sysctl.conf (quindi verrà eseguito al riavvio):
net.ipv4.tcp_tw_reuse=1
Quindi eseguilo per ricaricare (senza dover riavviare)
sudo sysctl -p /etc/sysctl.conf
Questa "correzione" disabiliterà lo stato di attesa per i socket TCP (a livello di server). Quindi, non è affatto una soluzione. Tuttavia, fino a quando mongo non riduce il proprio stato di attesa utilizzando SO_LINGER, un gran numero di socket del server si raggruppa nello stato TIME_WAIT e rimane inutilizzabile per nuove connessioni. Puoi vedere il conteggio delle connessioni in TIME_WAIT con questo:
netstat -an | grep TIME_WAIT | wc -l
Con ciò, sono stato in grado di vederlo fallire a circa 28k connessioni TIME_WAIT. Usando questo flag del kernel:
sysctl net.ipv4.ip_local_port_range="18000 65535"
Il server non riesce a 45k connessioni. Quindi, per riprodurre l'errore più facilmente, potresti abbassare l'intervallo a 200 o qualcosa di piccolo.
Quindi, il risultato di questo è stato una domanda di programmazione dopotutto (come puoi vedere dall'ultimo link):
Opzione TCP SO_LINGER (zero ) - quando è richiesto
http://alas.matf.bg.ac.rs /manuals/lspe/snode=105.html