CLI AI

Welcher Prozess frisst meine Bandbreite — ohne nethogs

2026-08-25

ss -tnp zeigt jede Verbindung samt dem Prozess, der sie hält, und ss -ti ergänzt Bytezähler je Socket. Zusammen ergibt das Traffic mit Prozesszuordnung, ohne irgendetwas zu installieren — wichtig auf einem Server, auf dem Sie Gast sind, in einem Container und überall, wo Ihnen root für Pakete fehlt.

1. Wer ist verbunden, und wessen Prozess ist das

clai
$ clai zeige aufgebaute verbindungen mit ihren prozessen→ ss -tnp 'sport = :8099 or dport = :8099'State Recv-Q Send-Q  Local Address:Port  Peer Address:Port Process                              ESTAB 0      4190912     127.0.0.1:8099     127.0.0.1:52080 users:(("python3",pid=1120102,fd=4))ESTAB 324447 0           127.0.0.1:52080    127.0.0.1:8099  users:(("curl",pid=1120130,fd=4))

Die Spalte Process liefert Name und PID direkt. Vier Megabyte Send-Q auf der Senderseite sind Daten, die die Anwendung bereits geschrieben hat und das Netz noch nicht abgeholt hat — ein verlässliches Zeichen, dass genau dieser Socket die Leitung füllt.

2. Wie viele Bytes durch einen Socket gingen

clai
$ clai zeige wie viele bytes über diese verbindung liefen→ ss -tin 'dport = :8099' | grep -oE 'bytes_sent:[0-9]+|bytes_received:[0-9]+'bytes_sent:85bytes_received:8579963

Das ist der Teil, den man kennen sollte. -i ergänzt interne TCP-Statistik, und darin stecken Bytezähler je Socket. Das ist "Traffic pro Prozess" ohne nethogs, denn der vorige Befehl hat den Socket bereits an eine PID gebunden.

3. Summen der Schnittstelle

clai
$ clai zeige die traffic-zähler der schnittstelle lo→ grep -E '^\s*lo:' /proc/net/dev | awk '{print "rx_bytes="$2, "tx_bytes="$10}'rx_bytes=581097986 tx_bytes=581097986

/proc/net/dev gibt es auf jedem Linux, Container eingeschlossen. Es sind Zähler seit dem Start, für sich genommen also bedeutungslos — der Sinn steckt in der Differenz zweier Messungen.

4. Durchsatz über eine Sekunde

clai
$ clai miss die übertragungsrate auf lo über eine sekunde→ a=$(awk '/^ *lo:/{print $10}' /proc/net/dev); sleep 1; b=$(awk '/^ *lo:/{print $10}' /proc/net/dev); echo "$(( (b-a)/1024 )) KB/s"4764 KB/s

Zwei Messungen im Abstand einer Sekunde — das ist das ganze Prinzip hinter jedem Bandbreitenmesser. lo durch eth0 oder enp5s0 ersetzen.

5. Prozesse mit den meisten Verbindungen

clai
$ clai zeige welche prozesse die meisten verbindungen halten→ ss -tnp | awk 'NR>1 {match($0,/"[^"]+"/); if (RSTART) print substr($0,RSTART+1,RLENGTH-2)}' | sort | uniq -c | sort -rn | head -5

Die Verbindungszahl ist kein Traffic, aber ein brauchbarer erster Schnitt: ein Prozess mit hundert Sockets fällt sofort auf. Danach prüfen Sie beim Verdächtigen die Bytezähler aus Schritt 2.

6. In Bewegung beobachten

clai
$ clai aktualisiere die verbindungsliste jede sekunde→ watch -n1 "ss -tnp state established"

ss hat keinen eigenen Wiederholmodus, den liefert watch. Der arme Verwandte von iftop — dafür auf jeder Maschine vorhanden, auf der Sie sich je anmelden.

Gotchas

  • Verbindungszahl ist keine Bandbreite. Ein Socket kann Gigabyte ziehen, während hundert leerlaufende Keep-alive-Verbindungen nichts bewegen. Verbindungen finden den Verdächtigen, die Zähler aus ss -ti sind der Beweis.
  • Ohne root sehen Sie nur eigene Prozesse. Die Spalte Process wird für fremde Sockets nur mit sudo gefüllt. Ein leeres Feld neben fremder Verbindung heißt "nicht dein Prozess", nicht "kein Prozess".
  • Schnittstellenzähler enthalten alles auf der Maschine. In /proc/net/dev landen auch Paketupdates, Monitoring-Agenten und Nachbarcontainer. Für eine genaue Antwort schauen Sie auf den Socket, nicht auf die Schnittstelle.

Related questions

Wann lohnt sich nethogs dann doch? Wenn Sie dauerhaftes, bequemes Monitoring pro Prozess brauchen. Eine einmalige Diagnose deckt ss vollständig ab; stundenlang hineinschauen ist etwas anderes.

Wie sehe ich den Traffic eines Containers? Seine Zähler liegen im eigenen Netzwerk-Namensraum: docker exec <name> cat /proc/net/dev zeigt exakt den Traffic dieses Containers.

Wie unterscheide ich eine volle Leitung von einer langsamen Anwendung? Wachsende Send-Q bei gleichbleibender Rate heißt, die Anwendung schreibt schneller, als das Netz abnimmt. Leere Send-Q bei geringem Durchsatz deutet auf die Anwendung oder die Gegenstelle.

See also

CliAI baut diese ss-Filter aus einem normalen Satz, damit Sie die Syntax nicht im Kopf behalten müssen. In einer Zeile installieren.