sql >> Databasteknik >  >> NoSQL >> MongoDB

Varför svarar MongoDB inte under ett belastningstest?

Fixade det:

sudo sysctl net.ipv4.tcp_tw_reuse=1

Starta sedan om mongo.

Alternativt kan du lägga till den i /etc/sysctl.conf (så att den körs vid omstart):

net.ipv4.tcp_tw_reuse=1

Kör sedan detta för att ladda om (utan att behöva starta om)

sudo sysctl -p /etc/sysctl.conf

Denna "fix" kommer att inaktivera timewait-tillståndet för TCP-sockets (serveromfattande). Så det är verkligen ingen fix alls. Men tills mongo minskar sitt timewait-tillstånd med SO_LINGER, kommer ett stort antal serversocket att slå sig samman i TIME_WAIT-tillståndet och förbli oanvändbara för nya anslutningar. Du kan se antalet anslutningar i TIME_WAIT med detta:

netstat -an | grep TIME_WAIT | wc -l

Med det kunde jag se att det misslyckades vid cirka 28k TIME_WAIT-anslutningar. Använder denna kärnflagga:

sysctl net.ipv4.ip_local_port_range="18000 65535"

Servern misslyckas vid 45k anslutningar. Så för att återskapa felet lättare kan du sänka intervallet till 200 eller något litet.

Så resultatet av detta var en programmeringsfråga trots allt (som du kan se på sista länken):

TCP-alternativ SO_LINGER (noll) ) - när det behövs

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



  1. anropa en mongosamling med hjälp av en variabel

  2. Hur kan jag köra MongoDB som en Windows-tjänst?

  3. MongoDB CursorNotFound Fel på collection.find() för några hundra små poster

  4. Hur får man en förklaring för en MongoDB-räkning?