sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Por qué MongoDB no responde durante una prueba de carga?

Lo arreglé:

sudo sysctl net.ipv4.tcp_tw_reuse=1

Luego, reinicie mongo.

Alternativamente, puede agregarlo a /etc/sysctl.conf (para que se ejecute al reiniciar):

net.ipv4.tcp_tw_reuse=1

Luego ejecute esto para recargar (sin tener que reiniciar)

sudo sysctl -p /etc/sysctl.conf

Esta "corrección" deshabilitará el estado de tiempo de espera para los sockets TCP (en todo el servidor). Entonces, realmente no es una solución en absoluto. Sin embargo, hasta que mongo reduzca su estado de tiempo de espera usando SO_LINGER, una gran cantidad de sockets de servidor se agruparán en el estado TIME_WAIT y permanecerán inutilizables para nuevas conexiones. Puedes ver el conteo de conexiones en TIME_WAIT con esto:

netstat -an | grep TIME_WAIT | wc -l

Con eso, pude verlo fallar en alrededor de 28k TIME_WAIT conexiones. Usando esta bandera del kernel:

sysctl net.ipv4.ip_local_port_range="18000 65535"

El servidor falla en 45k conexiones. Entonces, para reproducir el error más fácilmente, puede reducir el rango a 200 o algo más pequeño.

Entonces, el resultado de esto fue una pregunta de programación después de todo (como puede ver en el último enlace):

Opción TCP SO_LINGER (cero ) - cuando sea necesario

http://alas.matf.bg.ac.rs /manuals/lspe/snode=105.html