Warum dauert das Lesen von /proc/net/tcp so lange, obwohl SS schnell die gleiche Art von Daten über die Verbindungstabelle zurückgibt?

Warum dauert das Lesen von /proc/net/tcp so lange, obwohl SS schnell die gleiche Art von Daten über die Verbindungstabelle zurückgibt?

Wenn Sie unter Linux 2.6.32 (z. B. cat) /proc/net/tcp auf einem sehr ausgelasteten System (z. B. einem Webserver) lesen, werden Sie feststellen, dass das Lesen von 100.000 Einträgen über 30 Sekunden dauert. Das ist eine lange Zeit.

Was passiert hinter den Kulissen? Werden Sperren vorgenommen?

Viele Leute erwähnen die Geschwindigkeit des „ss“-Befehls. Was macht der „ss“-Befehl, was „cat /proc/net/tcp“ oder „netstat“ nicht machen, und was ihn so viel schneller macht?

Antwort1

ssverwendet die AF_NETLINKSocket-Schicht, um mit dem Kernel zu kommunizieren. Dies ist ein Protokoll auf niedrigerer Ebene, ermöglicht aber eine sehr schnelle und in großen Mengen übertragene Datenübertragung. Ein kurzer Blick straceauf CentOS 7 zeigt, dass das Übertragungsfenster auf 1 MB eingestellt ist.

verwandte Informationen