MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Por que o MongoDB não responde durante um teste de carga?


Corrigido:
sudo sysctl net.ipv4.tcp_tw_reuse=1

Em seguida, reinicie o mongo.

Alternativamente, você pode adicioná-lo ao /etc/sysctl.conf (para que seja executado na reinicialização):
net.ipv4.tcp_tw_reuse=1

Em seguida, execute isso para recarregar (sem ter que reiniciar)
sudo sysctl -p /etc/sysctl.conf

Essa "correção" desabilitará o estado de espera de tempo para soquetes TCP (todo o servidor). Então, não é realmente uma correção. No entanto, até que o mongo reduza seu estado de espera de tempo usando SO_LINGER, um grande número de soquetes de servidor será agrupado no estado TIME_WAIT e permanecerá inutilizável para novas conexões. Você pode ver a contagem de conexões em TIME_WAIT com isto:
netstat -an | grep TIME_WAIT | wc -l

Com isso, consegui vê-lo falhar em cerca de 28 mil conexões TIME_WAIT. Usando este sinalizador do kernel:
sysctl net.ipv4.ip_local_port_range="18000 65535"

O servidor falha em 45k conexões. Portanto, para reproduzir o erro com mais facilidade, você pode diminuir o intervalo para 200 ou algo pequeno.

Então, o resultado disso foi afinal, uma questão de programação (como você pode ver no último link):

Opção TCP SO_LINGER (zero ) - quando necessário

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