Cómo funciona nettop en macOS (y por qué quieres una interfaz gráfica)
Un recorrido amigable por nettop en macOS: qué muestra, qué no, y dónde un monitor gráfico de ancho de banda toma el relevo.
- Developer tools
- macOS
- Network monitoring
- Tutorial
Abre Terminal y escribe nettop. En un segundo tienes una pantalla en vivo, estilo top, de cada proceso en tu Mac haciendo I/O de red: bytes entrantes, bytes salientes, las rutas que toman, los protocolos que usan. Es una herramienta que no sabías que tenías, y una vez la encuentras te preguntas por qué abriste alguna vez la pestaña Red del Monitor de Actividad. Esto es un recorrido por nettop en macOS, las flags que realmente importan y los lugares donde nettop se queda sin camino.
Spoiler: nettop es genial para una mirada puntual. No es genial para "¿qué estaba haciendo Slack ayer a las 3 PM?". Esa es la brecha que llena una interfaz encima de los mismos contadores del kernel.
Qué es realmente nettop en macOS
nettop viene con macOS, vive en /usr/bin/nettop, y ha estado ahí al menos desde 10.7. Es un pequeño frontend de línea de comandos sobre las mismas APIs del kernel que usan el Monitor de Actividad e Instruments: principalmente proc_pidinfo con las variantes de socket y stats, más contadores por ruta. No requiere root para la mayoría de los usos. No captura paquetes. No necesita instalador.
Ejecútalo sin flags:
nettopVerás algo como:
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
...Pulsa q para salir, ? para ayuda, r para alternar entre tasas y totales, d para alternar el modo delta.
Las flags que vale la pena conocer
Hay muchas flags de nettop. La mayoría son ruido. Estas son las que realmente uso.
-m para modo
-m route muestra el tráfico por ruta, útil para ver si vas por la red local, el túnel VPN o la ruta por defecto.
-m tcp y -m udp filtran a un protocolo.
-m process es el predeterminado y el que quieres la mayor parte del tiempo.
-P para selector de procesos
-P hace que nettop corra una vez y vuelque una instantánea estática en lugar de refrescar en vivo. Esto es lo que quieres cuando lo escripteas o canalizas a otra herramienta.
nettop -P -L 1Eso ejecuta nettop en modo no interactivo durante una muestra y sale. Combínalo con -J para limitar columnas (más sobre eso abajo) para una salida limpia de log.
-L para modo log
-L <conteo> ejecuta nettop en modo log durante un número dado de muestras y sale. -L 0 corre para siempre, volcando una línea de muestra cada intervalo. El intervalo predeterminado es 1 segundo; cámbialo con -s.
nettop -L 60 -s 1 -P -J bytes_in,bytes_out,interface,stateEso captura una muestra por segundo durante 60 segundos, con solo las columnas que te importan, y sale. Canaliza a un archivo para análisis posterior.
-J para selección de columnas
-J toma una lista separada por comas de nombres de columna. Columnas útiles:
bytes_in,bytes_out— totales desde que arrancó el procesorx_dupe,rx_ooo— retransmisiones TCP y paquetes fuera de ordenre-tx— retransmisionesrtt_avg— tiempo de ida y vuelta, útil para detectar redes lentasrcvsize,tx_win— estado del buffer de socketinterface— qué interfaz (en0, utun0, lo0)state— estado de la conexión (Established, TimeWait, Listen)
La lista completa está en man nettop. Hay aproximadamente 30 columnas; la mayoría del tiempo bytes_in,bytes_out,interface,state es suficiente.
-x para XML
-x saca en formato XML plist: parseable, doloroso de leer, pero útil si quieres alimentar nettop a otro script. En la práctica, la salida de columnas con forma de JSON vía -J y -L es normalmente más fácil de manejar.
-k para ocultar
-k <columna> oculta una columna que no te importa. Lo opuesto a -J. Úsalo interactivamente cuando quieras mantener la pantalla en vivo pero recortar el ruido.
Leer la salida
Algunas cosas a saber sobre los números que reporta nettop en macOS:
Los totales son desde que arrancó el proceso, no desde que lanzaste nettop. Un proceso de larga duración como cloudd puede mostrar cientos de MB incluso en un sistema tranquilo. Usa el modo delta (d interactivamente, o calcula deltas de la salida -L log) para ver tasas reales.
Cada fila es un flujo, no un proceso. Un único proceso de Chrome con 40 pestañas puede tener 40+ filas. Agrega por PID tú mismo, nettop no lo hará.
Los procesos auxiliares aparecen con su nombre auxiliar. Google Chrome Helper (Renderer), Slack Helper, com.docker.backend. No hay agrupación. Ves la vista cruda del kernel.
Las rutas pueden ser sorprendentes. Una conexión yendo por un túnel VPN mostrará la interfaz utun0 o similar, no en0. Si ves tráfico en una interfaz que no reconoces, eso vale la pena investigar.
Dónde se queda corto nettop
Para una herramienta gratuita e integrada, nettop es genuinamente útil. Pero hay límites reales.
Sin historial
Sal de nettop y los datos se han ido. No hay archivo de log, no hay ventana rodante, no hay estado persistido. Si no estabas mirando cuando pasó el pico, no lo viste. El modo log -L ayuda si lo configuras antes del evento que quieres capturar, pero eso es planificación, no depuración.
Sin agrupación de auxiliares
Como se notó, ves Google Chrome Helper (GPU), (Plugin), (Renderer), etc., como filas separadas. Sumarlos mentalmente entre 30 procesos renderer de corta vida es tedioso y propenso a errores.
Solo terminal
Una sesión de nettop en vivo se lleva una ventana de Terminal. Si quieres mirar "¿está algo usando ancho de banda ahora mismo?" mientras escribes código, tienes que cambiar de contexto. No hay widget de barra de menú, no hay notificación, no hay icono de bandeja.
Nombres de columna confusos
re-tx, rtt_var, tx_dupe: las columnas se nombran por estadísticas TCP del kernel, no para humanos. La página de manual es tu amiga, pero la curva de aprendizaje es real.
Sin filtros por app o categoría
No puedes decir "muéstrame solo Chrome y sus auxiliares" o "muéstrame todo excepto procesos del sistema". Filtras canalizando a grep, que funciona pero no es agradable.
Sin alertas
Si quieres saber cuándo una app empieza de pronto a usar 50 MB/s, nettop no te lo dirá. Necesitarías envolverlo en un script de polling que calcule diferencias de muestras y compare contra un umbral.
Ve ova en acción
Un monitor de ancho de banda en la barra de menú visible de un vistazo: local, firmado, ~3 MB.
Por qué una interfaz ayuda
La mayor parte del tiempo, no quieres realmente saber estadísticas TCP por flujo. Quieres saber:
- ¿Está algo usando ancho de banda ahora mismo?
- ¿Qué app es?
- ¿Cuánto ha usado cada app en la última hora, día, semana?
Una app de barra de menú como ova lee aproximadamente los mismos datos del kernel que lee nettop, pero hace tres cosas encima:
- Agrupa los procesos auxiliares bajo su app padre, así que "Slack" es una fila
- Almacena el historial localmente, así que puedes retroceder y preguntar "qué pasó a las 2:47 PM"
- Vive en la barra de menú, así que está a un vistazo mientras trabajas
Eso no es mejor que nettop, es distinto. nettop es una herramienta de depuración a la que recurres en momentos. Un monitor de ancho de banda es conciencia ambiente.
Combinar nettop con otras herramientas
nettop se empareja bien con algunas otras integradas.
nettop + lsof
nettop te muestra qué PID está usando ancho de banda. lsof -p <PID> te muestra cada archivo y socket que ese PID tiene abierto. Juntos responden "¿con qué endpoint remoto está hablando esta app?".
lsof -i -P -n -p 41218Eso lista cada socket IPv4/IPv6 abierto por el PID 41218, con direcciones y puertos remotos.
nettop + log show
Si sospechas que un servicio del sistema se está comportando mal, el log unificado normalmente tiene más contexto que nettop. Tras detectar un proceso ofensivo en nettop, ejecuta:
log show --last 5m --predicate 'process == "cloudd"'…para ver qué estaba haciendo cloudd al mismo tiempo.
nettop + tcpdump
Cuando necesitas saber qué hay realmente en el cable, la captura de paquetes es la respuesta. nettop te dice "Chrome está subiendo 12 MB/s a 142.250.x.x". sudo tcpdump -i en0 host 142.250.x.x te dice si es HTTP/2 o QUIC, cuál era el SNI, qué códigos de respuesta están volviendo.
Un ejemplo trabajado
Supón que el ventilador de tu portátil se acelera mientras estás inactivo. Cadena de investigación:
- Abre un terminal, ejecuta
nettop -P -L 5 -s 2 -J bytes_in,bytes_out,interface. - Lee la salida. Supón que
clouddmuestra 80 MB de subida en 10 segundos. - Ejecuta
log show --last 1m --predicate 'process == "cloudd"' --info. - El log dice que iCloud está subiendo fotos tomadas con tu teléfono antes hoy.
- Decide si esperar, limitar iCloud o pausar la subida.
Esa secuencia entera lleva unos 90 segundos. Si hubieras instalado ova el día anterior, el paso 1 sería "mira la barra de menú", y ya sabrías que cloudd era el culpable antes de abrir un terminal. El paso del log unificado sigue aplicando.
Para terminar
nettop en macOS es una herramienta pequeña, rápida e integrada que nadie comercializa. Una vez sabes que existe, es la respuesta correcta para "necesito ver qué está usando mi red ahora mismo". Sus límites son reales —sin historial, sin agrupación, solo terminal— pero dentro de su alcance es difícil de batir gratis.
Para conciencia ambiente, historial recorrible y agrupación por app sin escribir un comando, quieres una app de barra de menú. ova hace esa parte: unos 3 MB, macOS 14+, Apple Silicon e Intel, muestrea aproximadamente a 1 Hz, almacena todo localmente en disco. nettop y ova resuelven problemas adyacentes, y la mayoría de los usuarios de macOS se benefician de tener ambos.