Sehr oft denke ich bei der Fehlerbehebung und Optimierung über die folgenden Linux-Kernel-Einstellungen nach:
net.core.netdev_max_backlog
net.ipv4.tcp_max_syn_backlog
net.core.somaxconn
Anders als fs.file-max
, net.ipv4.ip_local_port_range
, net.core.rmem_max
, net.core.wmem_max
, net.ipv4.tcp_rmem
, und net.ipv4.tcp_wmem
, so scheint sie die wichtige Knöpfe zu verwirren , um mit , wenn Sie ein Feld für eine hohes Maß an Parallelität zu stimmen.
Meine Frage: Wie kann ich überprüfen, wie viele Elemente sich in jeder dieser Warteschlangen befinden? Normalerweise setzen die Leute sie einfach auf ein Superhoch, aber ich möchte diese Warteschlangengrößen protokollieren, um zukünftige Fehler vorherzusagen und Probleme zu erkennen, bevor sie sich auf eine vom Benutzer wahrnehmbare Weise manifestieren.
linux
kernel
networking
tcp
Colin Hostert
quelle
quelle
Antworten:
Auch ich habe mich darüber gewundert und war von Ihrer Frage motiviert!
Ich habe zusammengetragen, wie nahe ich an jede der von Ihnen aufgelisteten Warteschlangen herankommen könnte, und habe einige Informationen zu den einzelnen Warteschlangen zusammengetragen. Ich freue mich über Kommentare und Feedback. Jede Verbesserung der Überwachung erleichtert die Verwaltung!
Zeigt die aktuelle globale Anzahl der Verbindungen in der Warteschlange an. Sie können diese Anzahl pro Port aufteilen und in exec-Anweisungen in der Datei snmpd.conf einfügen, wenn Sie sie von einer Überwachungsanwendung abrufen möchten.
Von:
Diese zeigen Ihnen, wie oft Sie Anfragen aus der Warteschlange sehen:
Von:
http://linux.die.net/man/5/proc
Diese (schreibgeschützte) Datei gibt die Anzahl der aktuell geöffneten Dateien an. Es enthält drei Zahlen: Die Anzahl der zugewiesenen Dateihandles, die Anzahl der freien Dateihandles und die maximale Anzahl der Dateihandles.
Wenn Sie eine Ausschlussliste von Diensten erstellen können (netstat -an | grep LISTEN), können Sie ableiten, wie viele Verbindungen für kurzlebige Aktivitäten verwendet werden:
Sollte auch überwachen (von SNMP):
Es kann auch interessant sein, Statistiken über alle in diesem Baum angezeigten Zustände zu sammeln (established / time_wait / fin_wait / etc):
Sie müssten Ihr System für setsockopt-Anforderungen verfolgen / stracen. Ich denke nicht, dass Statistiken für diese Anfragen anderweitig erfasst werden. Dies ist kein Wert, der sich nach meinem Verständnis ändert. Die Anwendung, die Sie bereitgestellt haben, wird wahrscheinlich nach einem Standardbetrag fragen. Ich denke, Sie könnten Ihre Anwendung mit strace "profilieren" und diesen Wert entsprechend konfigurieren. (diskutieren?)
Um zu verfolgen, wie nahe Sie am Limit sind, müssten Sie den Durchschnitt und das Maximum der Felder tx_queue und rx_queue von (regelmäßig) anzeigen:
Um diesbezügliche Fehler zu verfolgen:
Sollte auch den globalen Pufferpool überwachen (über SNMP):
quelle
Möglicherweise können Sie diese Daten mit SystemTap abrufen. Hier ist das Redhat Referenzhandbuch (pdf) . Es gibt auch einen Anfängerleitfaden (pdf) .
Das Tool sieht so vielseitig aus, dass Sie diese Daten abrufen können. Insbesondere
probe::netdev.rx
sieht es so aus, als würden Sie Informationen zu eingehenden Einträgen erhalten. Jetzt müssen Sie "nur" die Nettogröße der Warteschlange im Puffer ermitteln oder etwas, das zählt die Warteschlange verlassen ...quelle