sql >> Database >  >> NoSQL >> MongoDB

Waarom reageert MongoDB niet tijdens een laadtest?

Probleem opgelost:

sudo sysctl net.ipv4.tcp_tw_reuse=1

Start daarna mongo opnieuw.

Als alternatief kunt u het toevoegen aan /etc/sysctl.conf (zodat het wordt uitgevoerd bij opnieuw opstarten):

net.ipv4.tcp_tw_reuse=1

Voer dit vervolgens uit om te herladen (zonder opnieuw te hoeven opstarten)

sudo sysctl -p /etc/sysctl.conf

Deze "fix" schakelt de timewait-status voor TCP-sockets uit (serverbreed). Het is dus echt geen oplossing. Echter, totdat Mongo hun timewait-status vermindert met SO_LINGER, zal een groot aantal server-sockets zich verzamelen in de TIME_WAIT-status en onbruikbaar blijven voor nieuwe verbindingen. U kunt het aantal verbindingen in TIME_WAIT hiermee zien:

netstat -an | grep TIME_WAIT | wc -l

Daarmee kon ik zien dat het faalde bij ongeveer 28k TIME_WAIT-verbindingen. Deze kernelvlag gebruiken:

sysctl net.ipv4.ip_local_port_range="18000 65535"

De server faalt bij 45k verbindingen. Dus om de fout gemakkelijker te reproduceren, zou je het bereik kunnen verlagen tot 200 of iets kleins.

Dus het resultaat hiervan was toch een programmeervraag (zoals je kunt zien op de laatste link):

TCP-optie SO_LINGER (nul ) - wanneer het nodig is

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



  1. Gegevensmigraties met Redis

  2. Wat is het alternatief voor de elastische rivier-mongodb-plug-in, ondersteund door elasticsearch 2.2.0?

  3. MongoDB- Exact array-element ophalen, met uitzondering van anderen

  4. De huidige datetime invoegen in mongodb