Fehlerbehebung bei langsamer Leistung: 'netstat' und 'ss' effektiv nutzen
Bei der Diagnose langsamer Anwendungsleistung oder unerwartetem Verbindungsverhalten auf einem Linux-System ist der Netzwerk-Stack oft die erste Anlaufstelle. Das Verständnis von etablierten, lauschenden und transienten Verbindungen ist entscheidend, um Engpässe, bösartige Prozesse oder Sicherheitsanomalien zu identifizieren. Historisch gesehen verließen sich Administratoren stark auf das Dienstprogramm netstat. Moderne Linux-Distributionen bevorzugen jedoch das schnellere, funktionsreichere Dienstprogramm ss (Socket-Statistiken).
Dieser Leitfaden bietet einen umfassenden Vergleich von netstat und ss und erläutert, wie beide Tools effektiv eingesetzt werden können, um TCP- und UDP-Sockets zu überwachen, Verbindungszustände zu analysieren und Leistungsprobleme auf Ihrem System zu lokalisieren.
Warum Netzwerk-Sockets überwachen?
Netzwerklatenz und -trägeheit sind häufig eher mit Verbindungsproblemen als mit CPU- oder Speicherauslastung verbunden. Die Überwachung von Sockets hilft Administratoren, kritische Fragen zu beantworten, wie zum Beispiel:
- Welche Ports lauschen aktiv auf Verbindungen?
- Gibt es zu viele Verbindungen, die im Zustand
SYN_RECVoderTIME_WAIThängenbleiben? - Welcher Prozess (PID) verwendet einen bestimmten Port?
- Treten unerwartete ausgehende Verbindungen auf?
Durch die Untersuchung von Socket-Statistiken können Sie Netzwerkkonfigurationsprobleme schnell ausschließen oder Ressourcenkonflikte im Zusammenhang mit der Verbindungsverarbeitung identifizieren.
Das Legacy-Tool: netstat
netstat ist seit Jahrzehnten das Standarddienstprogramm zur Anzeige von Netzwerkverbindungen, Routing-Tabellen, Schnittstellenstatistiken und Masquerade-Verbindungen. Obwohl es auf vielen modernen Systemen zugunsten von ss als veraltet gilt, ist es weiterhin weit verbreitet und langjährigen Administratoren oft vertraut.
Häufige netstat-Beispiele
Die häufigsten mit netstat verwendeten Flags bieten einen umfassenden Überblick:
| Flag | Beschreibung |
|---|---|
-a |
Zeigt alle Sockets an (lauschende und nicht-lauschende) |
-n |
Zeigt numerische Adressen an, anstatt Hostnamen und Dienstnamen aufzulösen (beschleunigt die Ausgabe) |
-t |
Zeigt TCP-Verbindungen an |
-u |
Zeigt UDP-Verbindungen an |
-l |
Zeigt nur lauschende Sockets an |
-p |
Zeigt die PID/den Programmnamen an, der dem Socket zugeordnet ist (erfordert Root-Rechte) |
Beispiel: Anzeigen aller aktiven TCP-Verbindungen numerisch
sudo netstat -ant
Beispiel: Finden, was auf Port 80 (HTTP) lauscht
sudo netstat -antlp | grep ':80'
Verbindungszustände verstehen (netstat)
Die Ausgabe von netstat enthält oft eine Spalte State. Wichtige Zustände, auf die Sie achten sollten, sind:
- LISTEN: Wartet auf eingehende Verbindungen.
- ESTABLISHED: Eine aktive, offene Verbindung.
- TIME_WAIT: Ein Socket wartet für eine kurze Zeit nach dem Schließen, um sicherzustellen, dass verzögerte Pakete verarbeitet werden.
- SYN_RECV: Wartet auf die endgültige Bestätigung eines Drei-Wege-Handshakes (kann bei übermäßiger Anzahl auf einen SYN-Flood-Angriff hindeuten).
Warnung zu
netstat:netstatverlässt sich oft auf das Parsen von/proc/net/*-Dateien, was langsam sein kann, insbesondere auf Systemen mit einer sehr hohen Anzahl aktiver Verbindungen (Tausende). Dies ist der Hauptgrund, warumssentwickelt wurde.
Der moderne Ersatz: ss (Socket Statistics)
Das Dienstprogramm ss ist erheblich schneller als netstat, da es Socket-Informationen direkt aus dem Kernel-Space über Netlink-Sockets abruft und somit langsamere Dateisystem-Lookups umgeht.
Häufige ss-Beispiele
Die Flag-Struktur für ss ist netstat sehr ähnlich, was einen einfachen Übergang fördert:
| Flag | Beschreibung |
| :--- | :--- |\
| -a | Zeigt alle Sockets an |\
| -n | Zeigt numerische Adressen an |\
| -t | Zeigt TCP-Sockets an |\
| -u | Zeigt UDP-Sockets an |\
| -l | Zeigt lauschende Sockets an |\
| -p | Zeigt Prozessinformationen an (PID/Programm) |\
Beispiel: Anzeigen aller aktiven TCP-Verbindungen numerisch (Äquivalent zu netstat -ant)
ss -ant
Beispiel: Finden, was auf Port 443 (HTTPS) lauscht
sudo ss -antlp | grep ':443'
Erweiterte Filterung mit ss
Einer der größten Vorteile von ss ist seine Fähigkeit, direkte Filterungen nach Verbindungszuständen durchzuführen, was wesentlich effizienter ist, als die Ausgabe von netstat an grep weiterzuleiten.
Filterung nach Verbindungszustand
Sie können die Option state direkt innerhalb des ss-Befehls verwenden. Dies ist äußerst nützlich zur Diagnose von Verbindungsaufbauproblemen.
Alle Sockets finden, die sich derzeit im Zustand TIME-WAIT befinden:
ss -s state time-wait
Alle Sockets finden, die sich im Zustand SYN-SENT befinden (Clientseite wartet auf Serverantwort):
ss -s state syn-sent
Filterung nach Port oder Adresse
Die Filterung nach Ziel- oder Quelladresse/Port ist unkompliziert:
Etablierte Verbindungen anzeigen, die für Port 22 (SSH) bestimmt sind:
ss -tn state established '( dport = :22 or sport = :22 )'
Verbindungen anzeigen, die mit einer bestimmten lokalen IP-Adresse zusammenhängen:
ss -ant '( daddr = 192.168.1.100 or saddr = 192.168.1.100 )'
Leistungsanalyse: netstat vs. ss Vergleich
Bei der Fehlerbehebung kommt es bei der Wahl zwischen den Tools oft auf Geschwindigkeit und Detailgrad an.
| Funktion | netstat | ss |
| :--- | :--- | :--- |\
| Geschwindigkeit | Langsamer (Liest Dateien) | Viel schneller (Verwendet Netlink-Sockets) |\
| Syntax | Ausgereift, gut dokumentiert | Ähnliche Flags, neuere spezifische Optionen |\
| Filterung | Erfordert Weiterleitung an grep | Native Unterstützung für Zustands- und Adressfilterung |\
| Informationstiefe | Gut für Grundlagen | Mehr Details zu Socket-Puffergrößen (TCP Info) |\
| Verfügbarkeit | Nahezu universell | Standard auf modernen Linux-Distributionen |\
Diagnose langsamen Verbindungsaufbaus
Wenn Clients langsame Verbindungen melden, suchen Sie nach Sockets, die auf Handshakes warten. Die Verwendung von ss ist der schnellste Weg, dies festzustellen:
- Auf hohe
SYN-RECV-Anzahlen prüfen: Dies deutet darauf hin, dass der Server Verbindungsanfragen empfängt, den Handshake aber nicht abschließt, oft aufgrund von Ressourcenengpässen oder hoher Traffic-Last.
bash ss -s | grep syn-rec - Auf hohe
SYN-SENT-Anzahlen prüfen: Wenn der Server selbst viele Verbindungen initiiert (z. B. als Client zu Datenbanken oder anderen APIs fungiert), zeigt dies an, dass er auf Antworten wartet.
bash ss -s | grep syn-sent
Wenn Sie in einer der beiden Kategorien außergewöhnlich hohe Zahlen sehen, ist es wahrscheinlich, dass die Anwendung, die diese Verbindungen initiiert, mit Netzwerklatenz oder Firewall-Problemen zu kämpfen hat.
Best Practices für die Netzwerk-Fehlerbehebung
- Immer
-nverwenden: Verwenden Sie bei der Fehlerbehebung oder Skripterstellung das numerische Flag (-n), um DNS-Auflösungsverzögerungen zu vermeiden, die die Diagnose verlangsamen können. sspriorisieren: Machen Siesszu Ihrem Standard-Tool. Verwenden Sienetstatnur auf Legacy-Systemen, auf denenssnicht verfügbar ist.- Als Root für PID ausführen: Um zu sehen, welches Programm einen Port verwendet, benötigen Sie in der Regel
sudo- oder Root-Rechte, wenn Sie das Flag-pmit beiden Dienstprogrammen verwenden. - Schnittstellenstatistiken prüfen: Vergessen Sie nicht die Schnittstellenzähler. Verwenden Sie
ip -s link show <interface_name>, um nach verworfenen Paketen oder Fehlern zu suchen, die auf ein Problem auf der physikalischen Schicht und nicht auf ein Socket-Problem hindeuten könnten.
Durch die Beherrschung der modernen Funktionen von ss und das Verständnis des grundlegenden Kontexts von netstat erhalten Systemadministratoren einen leistungsstarken Einblick in den Netzwerkzustand jedes Linux-Hosts, wodurch die Leistungsdiagnose erheblich beschleunigt wird.