Zurück zum Blog
·10 Min. Lesezeit·productdevbook

Wie nettop unter macOS funktioniert (und warum eine UI sinnvoll ist)

Eine freundliche Tour durch nettop unter macOS: was es zeigt, was nicht und wo ein grafischer Bandbreiten-Monitor übernimmt.

  • Developer tools
  • macOS
  • Network monitoring
  • Tutorial

Terminal öffnen und nettop tippen. Innerhalb einer Sekunde haben Sie eine Live-, Top-artige Anzeige jedes Prozesses auf Ihrem Mac, der Netzwerk-I/O macht — Bytes ein, Bytes aus, die Routen, die sie nehmen, die Protokolle, die sie nutzen. Es ist ein Tool, von dem Sie nicht wussten, dass Sie es haben, und sobald Sie es finden, fragen Sie sich, warum Sie je den Netzwerk-Tab im Activity Monitor geöffnet haben. Das ist eine Tour durch nettop auf macOS, die Flags, die wirklich zählen, und die Stellen, an denen nettop ans Ende kommt.

Spoiler: nettop ist großartig für einen einmaligen Blick. Es ist nicht großartig für „was hat Slack gestern um 15 Uhr gemacht?". Das ist die Lücke, die ein UI auf denselben Kernel-Zählern füllt.

Was nettop auf macOS wirklich ist

nettop kommt mit macOS, lebt unter /usr/bin/nettop und ist mindestens seit 10.7 da. Es ist ein kleines Kommandozeilen-Frontend über denselben Kernel-APIs, die Activity Monitor und Instruments nutzen — primär proc_pidinfo mit den Socket- und Stats-Varianten plus Pro-Route-Zählern. Es benötigt für die meisten Nutzungen kein root. Es erfasst keine Pakete. Es braucht keinen Installer.

Lassen Sie es ohne Flags laufen:

nettop

Sie sehen so etwas wie:

Processes
  Google Chrome.40621      tcp4         34.117.x.x.443        Established
  Google Chrome.40621      tcp4         142.250.x.x.443       Established
  Slack Helper.41218       tcp4         52.5.x.x.443          Established
  ...

Drücken Sie q zum Beenden, ? für Hilfe, r zum Umschalten zwischen Raten und Summen, d zum Umschalten des Delta-Modus.

Die wissenswerten Flags

Es gibt viele nettop-Flags. Die meisten sind Lärm. Das sind die, die ich tatsächlich nutze.

-m für den Modus

-m route zeigt Pro-Route-Verkehr — nützlich, um zu sehen, ob Sie über das lokale Netzwerk, den VPN-Tunnel oder die Default-Route gehen.

-m tcp und -m udp filtern auf ein Protokoll.

-m process ist der Standard und der, den Sie meistens wollen.

-P für den Prozess-Picker

-P lässt nettop einmal laufen und einen statischen Snapshot dumpen, statt live zu aktualisieren. Das ist, was Sie wollen, wenn Sie es skripten oder zu einem anderen Tool pipen.

nettop -P -L 1

Das lässt nettop im nicht-interaktiven Modus für ein Sample laufen und beendet sich. Kombinieren Sie mit -J, um Spalten zu begrenzen (mehr dazu unten) für sauberen Log-Output.

-L für den Log-Modus

-L <Anzahl> lässt nettop im Log-Modus für eine gegebene Anzahl an Samples laufen und beendet sich. -L 0 läuft ewig und dumpt eine Sample-Zeile pro Intervall. Das Standard-Intervall ist 1 Sekunde; ändern mit -s.

nettop -L 60 -s 1 -P -J bytes_in,bytes_out,interface,state

Das erfasst ein Sample pro Sekunde für 60 Sekunden, mit nur den Spalten, die Sie interessieren, und beendet sich. In eine Datei pipen für spätere Analyse.

-J für die Spaltenauswahl

-J nimmt eine kommagetrennte Liste von Spaltennamen. Nützliche Spalten:

  • bytes_in, bytes_out — Summen seit Prozessstart
  • rx_dupe, rx_ooo — TCP-Retransmits und Out-of-Order-Pakete
  • re-tx — Retransmits
  • rtt_avg — Roundtrip-Zeit, nützlich, um langsame Netzwerke zu erkennen
  • rcvsize, tx_win — Socket-Puffer-Zustand
  • interface — welche Schnittstelle (en0, utun0, lo0)
  • state — Verbindungszustand (Established, TimeWait, Listen)

Die volle Liste ist in man nettop. Es gibt etwa 30 Spalten; meistens reicht bytes_in,bytes_out,interface,state.

-x für XML

-x gibt im plist-XML-Format aus — parsbar, schmerzhaft zu lesen, aber nützlich, wenn Sie nettop in ein anderes Skript einspeisen wollen. In der Praxis ist der JSON-förmige Spalten-Output via -J und -L meist einfacher zu handhaben.

-k zum Verbergen

-k <Spalte> versteckt eine Spalte, die Ihnen egal ist. Das Gegenteil von -J. Nutzen Sie es interaktiv, wenn Sie die Live-Anzeige behalten, aber den Lärm trimmen wollen.

Den Output lesen

Ein paar Dinge, die Sie über die Zahlen wissen sollten, die nettop auf macOS meldet:

Summen sind seit Prozessstart, nicht seit Sie nettop gestartet haben. Ein langlebiger Prozess wie cloudd kann hunderte MB zeigen, selbst auf einem ruhigen System. Nutzen Sie den Delta-Modus (d interaktiv, oder berechnen Sie Deltas aus dem -L-Log-Output), um tatsächliche Raten zu sehen.

Jede Zeile ist ein Flow, kein Prozess. Ein einzelner Chrome-Prozess mit 40 Tabs kann 40+ Zeilen haben. Aggregieren Sie selbst nach PID — nettop tut es nicht.

Hilfsprozesse erscheinen unter ihrem Helper-Namen. Google Chrome Helper (Renderer), Slack Helper, com.docker.backend. Es gibt keine Zusammenfassung. Sie sehen die rohe Kernel-Sicht.

Routen können überraschen. Eine Verbindung durch einen VPN-Tunnel zeigt Schnittstelle utun0 oder ähnlich, nicht en0. Wenn Sie Verkehr auf einer Schnittstelle sehen, die Sie nicht erkennen, lohnt das eine Untersuchung.

Wo nettop versagt

Für ein kostenloses, eingebautes Tool ist nettop wirklich nützlich. Aber es gibt echte Limits.

Keine Historie

nettop beenden und die Daten sind weg. Es gibt keine Log-Datei, kein rollendes Fenster, keinen persistierten Zustand. Wenn Sie nicht hingeschaut haben, als die Spitze passierte, haben Sie sie nicht gesehen. -L Log-Modus hilft, wenn Sie ihn vor dem Ereignis aufsetzen, das Sie erfassen wollen, aber das ist Planen, kein Debuggen.

Keine Hilfsprozess-Zusammenfassung

Wie erwähnt sehen Sie Google Chrome Helper (GPU), (Plugin), (Renderer) usw. als separate Zeilen. Sie mental über 30 kurzlebige Renderer-Prozesse aufzusummieren ist mühsam und fehleranfällig.

Nur Terminal

Eine Live-nettop-Sitzung braucht ein Terminal-Fenster. Wenn Sie „nutzt etwas gerade Bandbreite?" beim Code-Schreiben blicken wollen, müssen Sie den Kontext wechseln. Es gibt kein Menüleisten-Widget, keine Benachrichtigung, kein Tray-Symbol.

Verwirrende Spaltennamen

re-tx, rtt_var, tx_dupe — die Spalten sind nach Kernel-TCP-Statistiken benannt, nicht nach Menschen. Die Manpage ist Ihr Freund, aber die Lernkurve ist real.

Keine Filter pro App oder Kategorie

Sie können nicht sagen „zeig mir nur Chrome und seine Hilfsprozesse" oder „zeig mir alles außer Systemprozessen". Sie filtern, indem Sie zu grep pipen, was funktioniert, aber nicht angenehm ist.

Keine Alarmierung

Wenn Sie wissen wollen, wenn eine App plötzlich 50 MB/s nutzt, sagt es Ihnen nettop nicht. Sie müssten es in ein Polling-Skript wickeln, das Samples diffed und gegen einen Schwellwert vergleicht.

Sehen Sie ova in Aktion

Ein auf einen Blick erfassbarer Menüleisten-Bandbreitenmonitor — lokal, signiert, ~3 MB.

Für macOS herunterladen

Warum ein UI hilft

Meistens wollen Sie nicht wirklich Pro-Flow-TCP-Statistiken wissen. Sie wollen wissen:

  1. Nutzt etwas gerade Bandbreite?
  2. Welche App ist es?
  3. Wie viel hat jede App in der letzten Stunde, am letzten Tag, in der letzten Woche genutzt?

Eine Menüleisten-App wie ova liest grob dieselben Kernel-Daten, die nettop liest, macht aber drei Dinge oben drauf:

  • Fasst Hilfsprozesse unter ihrer übergeordneten App zusammen, sodass „Slack" eine Zeile ist
  • Speichert Historie lokal, sodass Sie zurückscrubben und „was passierte um 14:47 Uhr" fragen können
  • Lebt in der Menüleiste, sodass es einen Blick weg ist, während Sie arbeiten

Das ist nicht besser als nettop — es ist anders. nettop ist ein Debugging-Tool, zu dem Sie in Momenten greifen. Ein Bandbreitenmonitor ist Umgebungsbewusstsein.

Live + Historie an einem Ort
ova zeigt die aktuelle Rate in Ihrer Menüleiste und eine vollständige scrubbare Zeitleiste dahinter. nettop zeigt die Live-Rate. ova hält auch gestern um 15 Uhr verfügbar.

nettop mit anderen Tools kombinieren

nettop passt gut mit ein paar anderen eingebauten Tools.

nettop + lsof

nettop zeigt Ihnen, welche PID Bandbreite nutzt. lsof -p <PID> zeigt Ihnen jede Datei und jeden Socket, den die PID offen hat. Zusammen beantworten sie „mit welchem Remote-Endpunkt spricht diese App?".

lsof -i -P -n -p 41218

Das listet jeden IPv4-/IPv6-Socket, der von PID 41218 offen ist, mit Remote-Adressen und -Ports.

nettop + log show

Wenn Sie vermuten, dass ein Systemdienst sich daneben benimmt, hat das Unified Log meist mehr Kontext als nettop. Nachdem Sie einen verursachenden Prozess in nettop entdeckt haben, lassen Sie laufen:

log show --last 5m --predicate 'process == "cloudd"'

…um zu sehen, was cloudd zur selben Zeit machte.

nettop + tcpdump

Wenn Sie wissen müssen, was tatsächlich auf der Leitung ist, ist Paket-Capture die Antwort. nettop sagt Ihnen „Chrome lädt mit 12 MB/s zu 142.250.x.x hoch". sudo tcpdump -i en0 host 142.250.x.x sagt Ihnen, ob es HTTP/2 oder QUIC ist, was die SNI war, welche Response-Codes zurückkommen.

Ein durchgespieltes Beispiel

Angenommen, der Lüfter Ihres Laptops legt los, während Sie idle sind. Untersuchungskette:

  1. Terminal öffnen, nettop -P -L 5 -s 2 -J bytes_in,bytes_out,interface ausführen.
  2. Output lesen. Angenommen cloudd zeigt 80 MB up über 10 Sekunden.
  3. log show --last 1m --predicate 'process == "cloudd"' --info ausführen.
  4. Das Log sagt, iCloud lädt heute früher gemachte Telefonfotos hoch.
  5. Entscheiden, ob Sie es aussitzen, iCloud drosseln oder den Upload pausieren.

Diese ganze Sequenz dauert etwa 90 Sekunden. Hätten Sie ova am Vortag installiert, wäre Schritt 1 „auf die Menüleiste schauen", und Sie wüssten cloudd als Verursacher schon vor dem Öffnen eines Terminals. Der Unified-Log-Schritt gilt weiter.

Fazit

nettop auf macOS ist ein kleines, schnelles, eingebautes Tool, das niemand vermarktet. Sobald Sie wissen, dass es existiert, ist es die richtige Antwort für „ich muss sehen, was gerade jetzt mein Netzwerk nutzt". Seine Limits sind real — keine Historie, keine Zusammenfassung, nur Terminal — aber innerhalb seines Umfangs ist es schwer zu schlagen für kostenlos.

Für Umgebungsbewusstsein, scrubbare Historie und Pro-App-Zusammenfassung ohne Befehl-Tippen wollen Sie eine Menüleisten-App. ova macht diesen Teil: etwa 3 MB, macOS 14+, Apple Silicon und Intel, samplet mit grob 1 Hz, speichert alles lokal auf Disk. nettop und ova lösen benachbarte Probleme, und die meisten macOS-Nutzer profitieren davon, beide zu haben.