MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Perché MongoDB non risponde durante un test di carico?

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