Die Einstellung net.core.somaxconn
auf höhere Werte ist nur auf Servern mit hoher Auslastung erforderlich, bei denen die neue Verbindungsrate so hoch / hoch ist, dass 128 (50% mehr in BSDs: 128 backlog
+ 64 half-open
) noch nicht akzeptierte Verbindungen als normal angesehen werden. Oder wenn Sie die Definition von "normal" an eine Anwendung selbst delegieren müssen.
Einige Administratoren verwenden High net.core.somaxconn
, um Probleme mit ihren Diensten zu verbergen. Aus Sicht des Benutzers sieht dies also wie eine Latenzspitze aus und nicht wie eine Unterbrechung der Verbindung / ein Timeout (gesteuert von net.ipv4.tcp_abort_on_overflow
Linux).
listen(2)
Handbuch sagt - net.core.somaxconn
Handelt nur an der oberen Grenze für eine Anwendung, die frei ist, etwas Kleineres zu wählen (normalerweise in der Konfiguration der App festgelegt). Einige Apps verwenden jedoch nur, listen(fd, -1)
was bedeutet, dass der Rückstand auf den vom System zulässigen Höchstwert gesetzt wird.
Die eigentliche Ursache ist entweder eine niedrige Verarbeitungsrate (z. B. ein einzelner Thread-Blocking-Server) oder eine unzureichende Anzahl von Worker-Threads / -Prozessen (z. B. Multi-Process- / Thread-Blocking-Software wie apache
/ tomcat
).
PS. Manchmal ist es vorzuziehen, schnell zu scheitern und den Load-Balancer die Aufgabe (Wiederholung) ausführen zu lassen, als den Benutzer warten zu lassen. Zu diesem Zweck setzen wir einen net.core.somaxconn
beliebigen Wert und begrenzen den Anwendungsrückstand auf z. B. 10
und setzen ihn net.ipv4.tcp_abort_on_overflow
auf 1.
PPS. Alte Versionen des Linux-Kernels haben einen üblen Fehler, den somaxcon
Wert auf 16 niedrigere Bits zu kürzen (dh den Wert auf "0" zu setzen uint16_t
), sodass die Erhöhung dieses Werts auf mehr als 65535
gefährlich sein kann. Weitere Informationen finden Sie unter: http://patchwork.ozlabs.org/patch/255460/
Weitere Informationen zu allen Backlog-Interna in Linux finden Sie unter: Funktionsweise von
TCP-Backlog in Linux .