Frage Wird die Erhöhung von net.core.somaconn einen Unterschied machen?


Ich kam in einen Argument auf dem net.core.somaxconn Parameter: Mir wurde gesagt, dass es keinen Unterschied machen wird, wenn wir den Standard 128 ändern.

Ich glaubte, das könnte genug Beweis sein:

"Wenn das Rückstandsargument größer als der Wert in / proc / sys / net / core / somaxconn ist, wird es automatisch auf diesen Wert gekürzt." http://linux.die.net/man/2/listen

aber es ist nicht.

Kennt jemand eine Methode, um dies mit zwei Rechnern zu belegen, die auf einem Gbit-Netzwerk sitzen? Das Beste wäre gegen MySQL, LVS, apache2 (2.2), memcached.


20
2018-06-26 21:17


Ursprung




Antworten:


Rahmen net.core.somaxconn zu höheren Werten wird nur auf Servern mit hoher Auslastung benötigt, wo die neue Verbindungsrate so hoch ist, dass 128 (50% mehr in BSDs: 128 backlog + 64 half-open) noch nicht akzeptierte Verbindungen gelten als normal. Oder wenn Sie die Definition von "normal" an eine Anwendung selbst delegieren müssen.

Einige Administratoren verwenden Hoch net.core.somaxconn um Probleme mit ihren Diensten zu verbergen, wird es aus Sicht des Benutzers aussehen wie eine Latenzspitze statt Verbindung unterbrochen / Timeout (gesteuert durch net.ipv4.tcp_abort_on_overflow in Linux).

listen(2) Handbuch sagt - net.core.somaxconn fungiert nur als obere Grenze für eine Anwendung, die frei ist, etwas kleiner zu wählen (normalerweise in der App-Konfiguration). Obwohl einige Apps nur verwenden listen(fd, -1) Dies bedeutet, dass der Rückstand auf den vom System zulässigen Höchstwert gesetzt wird.

Eine echte Ursache ist entweder eine langsame Verarbeitungsrate (z. B. ein Single-Thread-Blockierungsserver) oder eine unzureichende Anzahl von Worker-Threads / Prozessen (z. B. Multi-Prozess- / Thread-Blockierungssoftware wie z apache/tomcat)

PS. Manchmal ist es vorzuziehen, schnell zu versagen und den Load-Balancer dazu zu veranlassen, seine Aufgabe zu erfüllen (Wiederholung), als den Benutzer warten zu lassen - zu diesem Zweck setzen wir net.core.somaxconn irgendeinen Wert und Begrenzen des Anwendungsrückstands auf z.B. 10 und einstellen net.ipv4.tcp_abort_on_overflow bis 1.

PPS. Alte Versionen des Linux-Kernels haben einen bösen Fehler beim Abschneiden somaxcon Wert auf seine 16 unteren Bits (d. h uint16_t), also diesen Wert auf mehr als erhöhen 65535 kann sogar gefährlich sein. Für weitere Informationen siehe: http://patchwork.ozlabs.org/patch/255460/

Wenn Sie mehr über alle Backlog Interna in Linux erfahren möchten, lesen Sie bitte: Wie TCP-Backlog in Linux funktioniert.


30
2018-06-27 21:10