MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Warum reagiert MongoDB während eines Lasttests nicht?

Behoben:

sudo sysctl net.ipv4.tcp_tw_reuse=1

Starten Sie dann Mongo neu.

Alternativ können Sie es zu /etc/sysctl.conf hinzufügen (damit es beim Neustart ausgeführt wird):

net.ipv4.tcp_tw_reuse=1

Führen Sie dann dies aus, um neu zu laden (ohne neu starten zu müssen)

sudo sysctl -p /etc/sysctl.conf

Dieser "Fix" deaktiviert den Timewait-Status für TCP-Sockets (serverweit). Es ist also wirklich keine Lösung. Bis Mongo jedoch seinen Timewait-Zustand mit SO_LINGER reduziert, sammelt sich eine große Anzahl von Server-Sockets im TIME_WAIT-Zustand und bleibt für neue Verbindungen unbrauchbar. Sie können die Anzahl der Verbindungen in TIME_WAIT hiermit sehen:

netstat -an | grep TIME_WAIT | wc -l

Damit konnte ich sehen, dass es bei etwa 28.000 TIME_WAIT-Verbindungen fehlschlug. Unter Verwendung dieses Kernel-Flags:

sysctl net.ipv4.ip_local_port_range="18000 65535"

Der Server fällt bei 45.000 Verbindungen aus. Um den Fehler einfacher zu reproduzieren, könnten Sie den Bereich auf 200 oder etwas Kleineres verringern.

Das Ergebnis davon war also war doch eine Programmierfrage (wie man dem letzten Link entnehmen kann):

TCP-Option SO_LINGER (null ) - wenn es erforderlich ist

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