Torna al blog
·10 min di lettura·productdevbook

Come funziona nettop su macOS (e perché vuoi un'interfaccia grafica)

Una guida amichevole a nettop su macOS: cosa mostra, cosa no e dove un monitor grafico della banda prende il sopravvento.

  • Developer tools
  • macOS
  • Network monitoring
  • Tutorial

Apri il Terminale e digita nettop. Entro un secondo hai un display in stile top live di ogni processo sul tuo Mac che fa I/O di rete — byte in, byte fuori, le route che stanno prendendo, i protocolli che usano. È uno strumento che non sapevi di avere, e una volta trovato ti chiedi perché hai mai aperto la scheda Rete di Monitoraggio Attività. Questo è un giro di nettop su macOS, dei flag che contano davvero, e dei posti in cui nettop finisce la strada.

Spoiler: nettop è ottimo per uno sguardo una tantum. Non è ottimo per "cosa stava facendo Slack ieri alle 15?" Quello è il buco che riempie un'UI sopra questi stessi contatori del kernel.

Cos'è davvero nettop su macOS

nettop arriva con macOS, vive in /usr/bin/nettop, ed è lì almeno da 10.7. È un piccolo frontend a riga di comando sopra le stesse API del kernel che usano Monitoraggio Attività e Instruments — principalmente proc_pidinfo con le varianti socket e stats, più contatori per route. Non richiede root per gran parte degli usi. Non cattura pacchetti. Non ha bisogno di un installer.

Eseguilo senza flag:

nettop

Vedrai qualcosa tipo:

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
  ...

Premi q per uscire, ? per l'aiuto, r per alternare rate vs totali, d per alternare la modalità delta.

I flag che vale la pena conoscere

Ci sono tanti flag di nettop. La maggior parte è rumore. Questi sono quelli che uso davvero.

-m per la modalità

-m route mostra il traffico per route — utile per vedere se stai andando sulla rete locale, sul tunnel VPN, o sulla route default.

-m tcp e -m udp filtrano su un protocollo.

-m process è il default e quello che vuoi gran parte del tempo.

-P per il process picker

-P fa eseguire nettop una volta e fa scaricare uno snapshot statico, invece di refresharsi live. Questo è quello che vuoi quando lo scripti o lo inoltri a un altro strumento.

nettop -P -L 1

Questo esegue nettop in modalità non interattiva per un campione ed esce. Combina con -J per limitare le colonne (più sotto) per output di log puliti.

-L per la modalità log

-L <count> esegue nettop in modalità log per un dato numero di campioni ed esce. -L 0 gira per sempre, scaricando una riga di campione ad ogni intervallo. L'intervallo default è 1 secondo; cambialo con -s.

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

Cattura un campione al secondo per 60 secondi, con solo le colonne che ti interessano, ed esce. Inoltra su un file per analisi successiva.

-J per la selezione delle colonne

-J prende una lista separata da virgole di nomi di colonne. Colonne utili:

  • bytes_in, bytes_out — totali dall'avvio del processo
  • rx_dupe, rx_ooo — ritrasmissioni TCP e pacchetti fuori ordine
  • re-tx — ritrasmissioni
  • rtt_avg — round-trip time, utile per individuare reti lente
  • rcvsize, tx_win — stato del buffer del socket
  • interface — quale interfaccia (en0, utun0, lo0)
  • state — stato della connessione (Established, TimeWait, Listen)

La lista completa è in man nettop. Ci sono circa 30 colonne; gran parte del tempo bytes_in,bytes_out,interface,state basta.

-x per XML

-x produce output in formato plist XML — parsabile, doloroso da leggere, ma utile se vuoi alimentare nettop in un altro script. Nella pratica l'output di colonne formato JSON via -J e -L è di solito più facile da gestire.

-k per nascondere

-k <colonna> nasconde una colonna che non ti interessa. L'opposto di -J. Usalo interattivamente quando vuoi mantenere il display live ma tagliare il rumore.

Leggere l'output

Qualche cosa da sapere sui numeri che riporta nettop su macOS:

I totali sono dall'avvio del processo, non da quando hai lanciato nettop. Un processo di lunga durata come cloudd può mostrare centinaia di MB anche su un sistema tranquillo. Usa la modalità delta (d interattivamente, o calcola le delta dall'output di log -L) per vedere i rate effettivi.

Ogni riga è un flusso, non un processo. Un singolo processo Chrome con 40 schede può avere 40+ righe. Aggrega per PID da te — nettop non lo farà.

I processi ausiliari appaiono col loro nome di helper. Google Chrome Helper (Renderer), Slack Helper, com.docker.backend. Non c'è raggruppamento. Vedi la vista grezza del kernel.

Le route possono essere sorprendenti. Una connessione che va attraverso un tunnel VPN mostrerà l'interfaccia utun0 o simile, non en0. Se vedi traffico su un'interfaccia che non riconosci, vale la pena di indagare.

Dove nettop cade

Per uno strumento gratuito e integrato, nettop è genuinamente utile. Ma ci sono limiti reali.

Niente cronologia

Esci da nettop e i dati spariscono. Non c'è file di log, niente finestra mobile, niente stato persistito. Se non stavi guardando quando è successo il picco, non l'hai visto. La modalità log -L aiuta se la imposti prima dell'evento che vuoi catturare, ma è pianificazione, non debug.

Niente raggruppamento ausiliari

Come notato, vedi Google Chrome Helper (GPU), (Plugin), (Renderer), ecc., come righe separate. Sommarli mentalmente attraverso 30 processi renderer di breve durata è tedioso e soggetto a errore.

Solo terminale

Una sessione live di nettop prende una finestra Terminale. Se vuoi dare un'occhiata a "qualcosa sta usando banda adesso?" mentre scrivi codice, devi cambiare contesto. Niente widget nella barra dei menu, niente notifica, niente icona di tray.

Nomi di colonne confusi

re-tx, rtt_var, tx_dupe — le colonne sono nominate per le statistiche TCP del kernel, non per gli umani. La man page è tua amica, ma la curva di apprendimento è reale.

Niente filtri per app o categoria

Non puoi dire "mostrami solo Chrome e i suoi ausiliari" o "mostrami tutto eccetto i processi di sistema". Filtri inoltrando a grep, che funziona ma non è piacevole.

Niente alerting

Se vuoi sapere quando un'app inizia improvvisamente a usare 50 MB/s, nettop non te lo dirà. Servirebbe avvolgerlo in uno script di polling che fa diff sui campioni e li confronta con una soglia.

Vedi ova in azione

Un monitor della larghezza di banda nella barra dei menu visibile a colpo d'occhio — locale, firmato, ~3 MB.

Scarica per macOS

Perché un'UI aiuta

Gran parte del tempo, non vuoi davvero sapere statistiche TCP per flusso. Vuoi sapere:

  1. Qualcosa sta usando banda adesso?
  2. Quale app è?
  3. Quanto ha usato ogni app nell'ultima ora, giorno, settimana?

Un'app nella barra dei menu come ova legge grossomodo gli stessi dati del kernel che legge nettop, ma fa tre cose in più:

  • Raggruppa i processi ausiliari sotto la loro app principale, così "Slack" è una riga
  • Memorizza la cronologia in locale, così puoi scorrere indietro e chiedere "cosa è successo alle 14:47"
  • Vive nella barra dei menu, così è uno sguardo via mentre lavori

Non è meglio di nettop — è diverso. nettop è uno strumento di debug che usi nei momenti. Un monitor della larghezza di banda è consapevolezza ambientale.

Live + cronologia in un posto
ova mostra il rate corrente nella tua barra dei menu e una timeline scorrevole completa dietro. nettop mostra il rate live. ova tiene anche disponibili le 15 di ieri.

Combinare nettop con altri strumenti

nettop si abbina bene con qualche altro strumento integrato.

nettop + lsof

nettop ti mostra quale PID sta usando banda. lsof -p <PID> ti mostra ogni file e socket che quel PID ha aperto. Insieme rispondono a "con quale endpoint remoto sta parlando quest'app?"

lsof -i -P -n -p 41218

Elenca ogni socket IPv4/IPv6 aperto dal PID 41218, con indirizzi remoti e porte.

nettop + log show

Se sospetti che un servizio di sistema si stia comportando male, il log unificato ha di solito più contesto di nettop. Dopo aver individuato un processo incriminato in nettop, esegui:

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

…per vedere cosa stava facendo cloudd nello stesso momento.

nettop + tcpdump

Quando devi sapere cosa c'è davvero sul filo, la cattura pacchetti è la risposta. nettop ti dice "Chrome sta caricando 12 MB/s a 142.250.x.x". sudo tcpdump -i en0 host 142.250.x.x ti dice se è HTTP/2 o QUIC, qual era l'SNI, quali codici risposta arrivano.

Un esempio elaborato

Supponi che la ventola del laptop parta mentre sei a riposo. Catena di indagine:

  1. Apri un terminale, esegui nettop -P -L 5 -s 2 -J bytes_in,bytes_out,interface.
  2. Leggi l'output. Supponi che cloudd mostri 80 MB up in 10 secondi.
  3. Esegui log show --last 1m --predicate 'process == "cloudd"' --info.
  4. Il log dice che iCloud sta caricando foto scattate sul tuo telefono prima oggi.
  5. Decidi se aspettare, limitare iCloud, o mettere in pausa il caricamento.

L'intera sequenza richiede circa 90 secondi. Se avessi installato ova il giorno prima, il passo 1 sarebbe "guarda la barra dei menu", e sapresti già che cloudd era il colpevole prima di aprire un terminale. Il passo del log unificato si applica comunque.

In conclusione

nettop su macOS è un piccolo, veloce, integrato strumento che nessuno pubblicizza. Una volta che sai che esiste, è la risposta giusta per "ho bisogno di vedere cosa sta usando la mia rete adesso." I suoi limiti sono reali — niente cronologia, niente raggruppamento, solo terminale — ma dentro il suo scopo è difficile da battere gratis.

Per consapevolezza ambientale, cronologia scorrevole e raggruppamento per app senza digitare un comando, vuoi un'app nella barra dei menu. ova fa quella parte: circa 3 MB, macOS 14+, Apple Silicon e Intel, campiona a circa 1 Hz, memorizza tutto in locale sul disco. nettop e ova risolvono problemi adiacenti, e gran parte degli utenti macOS beneficia di averli entrambi.