Retour au blog
·10 min de lecture·productdevbook

Comment fonctionne nettop sur macOS (et pourquoi vous voulez une interface)

Tour d'horizon convivial de nettop sur macOS : ce qu'il montre, ce qu'il ne montre pas, et là où un moniteur graphique de bande passante prend le relais.

  • Developer tools
  • macOS
  • Network monitoring
  • Tutorial

Ouvrez Terminal et tapez nettop. En une seconde vous avez un affichage en direct, de style top, de chaque processus sur votre Mac faisant de l'I/O réseau — octets entrants, octets sortants, les routes qu'ils empruntent, les protocoles qu'ils utilisent. C'est un outil que vous ne saviez pas avoir, et une fois que vous le trouvez vous vous demandez pourquoi vous avez jamais ouvert l'onglet Network d'Activity Monitor. Voici une visite de nettop sur macOS, des drapeaux qui comptent vraiment, et des endroits où nettop arrive à court de chemin.

Spoiler : nettop est génial pour un coup d'œil ponctuel. Il n'est pas génial pour « que faisait Slack hier à 15 h ? » C'est l'écart qu'une interface au-dessus de ces mêmes compteurs noyau comble.

Ce qu'est vraiment nettop sur macOS

nettop est livré avec macOS, vit à /usr/bin/nettop, et y est depuis au moins 10.7. C'est un petit frontend en ligne de commande au-dessus des mêmes API noyau qu'Activity Monitor et Instruments utilisent — principalement proc_pidinfo avec les variantes socket et stats, plus les compteurs par route. Il n'exige pas root pour la plupart des usages. Il ne capture pas les paquets. Il n'a pas besoin d'installeur.

Lancez-le sans drapeaux :

nettop

Vous verrez quelque chose comme :

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

Appuyez sur q pour quitter, ? pour l'aide, r pour basculer débits vs totaux, d pour basculer le mode delta.

Les drapeaux qui valent la peine d'être connus

Il y a beaucoup de drapeaux nettop. La plupart sont du bruit. Voici ceux que j'utilise vraiment.

-m pour le mode

-m route montre le trafic par route — utile pour voir si vous passez par le réseau local, le tunnel VPN, ou la route par défaut.

-m tcp et -m udp filtrent à un protocole.

-m process est le défaut et celui que vous voulez la plupart du temps.

-P pour le sélecteur de processus

-P fait tourner nettop une fois et déverse un instantané statique, au lieu de rafraîchir en direct. C'est ce que vous voulez quand vous le scriptez ou pipez vers un autre outil.

nettop -P -L 1

Cela lance nettop en mode non-interactif pour un échantillon et quitte. Combinez avec -J pour limiter les colonnes (plus à ce sujet ci-dessous) pour une sortie de log propre.

-L pour le mode log

-L <count> lance nettop en mode log pour un nombre donné d'échantillons et quitte. -L 0 tourne pour toujours, déversant une ligne d'échantillon à chaque intervalle. L'intervalle par défaut est 1 seconde ; changez-le avec -s.

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

Cela capture un échantillon par seconde pendant 60 secondes, avec juste les colonnes qui vous importent, et quitte. Pipez vers un fichier pour analyse ultérieure.

-J pour la sélection de colonnes

-J prend une liste séparée par virgules de noms de colonnes. Colonnes utiles :

  • bytes_in, bytes_out — totaux depuis le démarrage du processus
  • rx_dupe, rx_ooo — retransmissions TCP et paquets hors-ordre
  • re-tx — retransmissions
  • rtt_avg — temps de round-trip, utile pour repérer les réseaux lents
  • rcvsize, tx_win — état du tampon socket
  • interface — quelle interface (en0, utun0, lo0)
  • state — état de connexion (Established, TimeWait, Listen)

La liste complète est dans man nettop. Il y a environ 30 colonnes ; la plupart du temps bytes_in,bytes_out,interface,state suffit.

-x pour XML

-x sort en format plist XML — analysable, douloureux à lire, mais utile si vous voulez alimenter nettop dans un autre script. En pratique la sortie de colonnes en forme JSON via -J et -L est généralement plus facile à manipuler.

-k pour cacher

-k <colonne> cache une colonne qui ne vous intéresse pas. L'opposé de -J. Utilisez-le interactivement quand vous voulez garder l'affichage en direct mais réduire le bruit.

Lire la sortie

Quelques choses à savoir sur les nombres que nettop sur macOS rapporte :

Les totaux sont depuis le démarrage du processus, pas depuis que vous avez lancé nettop. Un processus longue durée comme cloudd peut montrer des centaines de Mo même sur un système calme. Utilisez le mode delta (d interactivement, ou calculez les deltas depuis la sortie log -L) pour voir les vrais débits.

Chaque ligne est un flux, pas un processus. Un seul processus Chrome avec 40 onglets peut avoir 40+ lignes. Agrégez par PID vous-même — nettop ne le fera pas.

Les processus auxiliaires apparaissent par leur nom auxiliaire. Google Chrome Helper (Renderer), Slack Helper, com.docker.backend. Pas de regroupement. Vous voyez la vue brute du noyau.

Les routes peuvent être surprenantes. Une connexion passant par un tunnel VPN montrera l'interface utun0 ou similaire, pas en0. Si vous voyez du trafic sur une interface que vous ne reconnaissez pas, ça vaut l'investigation.

Où nettop tombe

Pour un outil intégré et gratuit, nettop est franchement utile. Mais il y a de vraies limites.

Pas d'historique

Quittez nettop et les données sont parties. Pas de fichier log, pas de fenêtre roulante, pas d'état persisté. Si vous ne regardiez pas quand le pic est arrivé, vous ne l'avez pas vu. Le mode log -L aide si vous le configurez avant l'événement que vous voulez capturer, mais c'est de la planification, pas du débogage.

Pas de regroupement des auxiliaires

Comme noté, vous voyez Google Chrome Helper (GPU), (Plugin), (Renderer), etc., comme lignes séparées. Les additionner mentalement à travers 30 processus de rendu de courte durée est tédieux et propice aux erreurs.

Terminal uniquement

Une session nettop en direct prend une fenêtre Terminal. Si vous voulez jeter un œil à « est-ce que quelque chose utilise la bande passante maintenant ? » pendant que vous écrivez du code, vous devez changer de contexte. Pas de widget en barre de menu, pas de notification, pas d'icône de tray.

Noms de colonnes confus

re-tx, rtt_var, tx_dupe — les colonnes sont nommées pour les statistiques TCP du noyau, pas pour les humains. La page de manuel est votre amie, mais la courbe d'apprentissage est réelle.

Pas de filtres par application ou catégorie

Vous ne pouvez pas dire « montre-moi seulement Chrome et ses auxiliaires » ou « montre-moi tout sauf les processus système ». Vous filtrez en pipant vers grep, ce qui marche mais n'est pas plaisant.

Pas d'alerte

Si vous voulez savoir quand une application commence soudain à utiliser 50 Mo/s, nettop ne vous le dira pas. Il faudrait l'enrober dans un script de polling qui diffe les échantillons et compare à un seuil.

Voyez ova en action

Un moniteur de bande passante en barre de menu consultable d'un coup d'œil — local, signé, ~3 Mo.

Télécharger pour macOS

Pourquoi une interface aide

La plupart du temps, vous ne voulez pas vraiment connaître les statistiques TCP par flux. Vous voulez savoir :

  1. Quelque chose utilise-t-il la bande passante maintenant ?
  2. Quelle application est-ce ?
  3. Combien chaque application a-t-elle utilisé dans la dernière heure, journée, semaine ?

Une application en barre de menu comme ova lit grossièrement les mêmes données noyau que nettop lit, mais fait trois choses en plus :

  • Regroupe les processus auxiliaires sous leur application parente, donc « Slack » est une ligne
  • Stocke l'historique localement, donc vous pouvez parcourir en arrière et demander « que s'est-il passé à 14:47 »
  • Vit dans la barre de menu, donc c'est à un coup d'œil pendant que vous travaillez

Ce n'est pas mieux que nettop — c'est différent. nettop est un outil de débogage que vous attrapez ponctuellement. Un moniteur de bande passante est de la conscience ambiante.

En direct + historique en un endroit
ova montre le débit actuel dans votre barre de menu et une chronologie complète parcourable derrière. nettop montre le débit en direct. ova garde aussi hier à 15 h disponible.

Combiner nettop avec d'autres outils

nettop s'associe bien avec quelques autres outils intégrés.

nettop + lsof

nettop vous montre quel PID utilise la bande passante. lsof -p <PID> vous montre chaque fichier et socket que ce PID a ouvert. Ensemble ils répondent « à quel endpoint distant cette application parle-t-elle ? »

lsof -i -P -n -p 41218

Cela liste chaque socket IPv4/IPv6 ouverte par le PID 41218, avec adresses distantes et ports.

nettop + log show

Si vous suspectez qu'un service système se comporte mal, le journal unifié a généralement plus de contexte que nettop. Après avoir repéré un processus fautif dans nettop, lancez :

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

… pour voir ce que cloudd faisait au même moment.

nettop + tcpdump

Quand vous avez besoin de savoir ce qu'il y a réellement sur le câble, la capture de paquets est la réponse. nettop vous dit « Chrome téléverse 12 Mo/s vers 142.250.x.x ». sudo tcpdump -i en0 host 142.250.x.x vous dit si c'est HTTP/2 ou QUIC, quel était le SNI, quels codes de réponse reviennent.

Un exemple concret

Supposez que le ventilateur de votre portable s'emballe pendant que vous êtes inactif. Chaîne d'investigation :

  1. Ouvrez un terminal, lancez nettop -P -L 5 -s 2 -J bytes_in,bytes_out,interface.
  2. Lisez la sortie. Supposez que cloudd montre 80 Mo en upload sur 10 secondes.
  3. Lancez log show --last 1m --predicate 'process == "cloudd"' --info.
  4. Le log dit qu'iCloud téléverse les photos prises sur votre téléphone plus tôt aujourd'hui.
  5. Décidez si attendre, limiter iCloud, ou mettre l'upload en pause.

Toute cette séquence prend environ 90 secondes. Si vous aviez installé ova la veille, l'étape 1 serait « regardez la barre de menu », et vous sauriez déjà que cloudd était le coupable avant d'ouvrir un terminal. L'étape du journal unifié s'applique encore.

Pour conclure

nettop sur macOS est un petit outil intégré et rapide que personne ne markete. Une fois que vous savez qu'il existe, c'est la bonne réponse pour « j'ai besoin de voir ce qui utilise mon réseau maintenant ». Ses limites sont réelles — pas d'historique, pas de regroupement, terminal uniquement — mais dans son périmètre c'est dur à battre pour gratuit.

Pour la conscience ambiante, l'historique parcourable, et le regroupement par application sans taper une commande, vous voulez une application en barre de menu. ova fait cette partie : environ 3 Mo, macOS 14+, Apple Silicon et Intel, échantillonne à environ 1 Hz, stocke tout localement sur disque. nettop et ova résolvent des problèmes adjacents, et la plupart des utilisateurs macOS bénéficient d'avoir les deux.