Como o nettop funciona no macOS (e por que você quer uma UI para ele)
Um tour amigável pelo nettop no macOS: o que ele mostra, o que não mostra e onde um monitor gráfico de banda toma o lugar.
- Developer tools
- macOS
- Network monitoring
- Tutorial
Abra o Terminal e digite nettop. Em um segundo você tem um display ao vivo, estilo top, de cada processo no seu Mac fazendo I/O de rede — bytes in, bytes out, as rotas que estão pegando, os protocolos que estão usando. É uma ferramenta que você não sabia que tinha, e quando descobre, pergunta por que algum dia abriu a aba Rede do Activity Monitor. Esse é um tour pelo nettop no macOS, as flags que de fato importam e os pontos onde o nettop fica sem saída.
Spoiler: nettop é ótimo para uma olhada pontual. Não é ótimo para "o que o Slack estava fazendo ontem às 15h?". Esse é o vão que uma UI em cima dos mesmos contadores de kernel preenche.
O que o nettop no macOS realmente é
nettop vem com o macOS, vive em /usr/bin/nettop, e está lá desde pelo menos o 10.7. É um pequeno frontend de linha de comando sobre as mesmas APIs de kernel que o Activity Monitor e o Instruments usam — principalmente proc_pidinfo com as variantes de socket e stats, mais contadores por rota. Não exige root para a maior parte dos usos. Não captura pacotes. Não precisa de instalador.
Rode sem flags:
nettopVocê verá 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
...Pressione q para sair, ? para ajuda, r para alternar taxas vs totais, d para alternar modo delta.
As flags que vale conhecer
Há muitas flags do nettop. A maioria é ruído. Essas são as que de fato uso.
-m para modo
-m route mostra tráfego por rota — útil para ver se você está indo pela rede local, pelo túnel VPN ou pela rota padrão.
-m tcp e -m udp filtram para um protocolo.
-m process é o padrão e o que você quer na maior parte do tempo.
-P para process picker
-P faz o nettop rodar uma vez e despejar um snapshot estático, em vez de atualizar ao vivo. É o que você quer ao escriptar ou redirecionar para outra ferramenta.
nettop -P -L 1Roda o nettop em modo não-interativo por uma amostra e sai. Combine com -J para limitar colunas (mais sobre isso abaixo) para saída de log limpa.
-L para modo log
-L <count> roda o nettop em modo log por um número de amostras e sai. -L 0 roda para sempre, despejando uma linha de amostra a cada intervalo. O intervalo padrão é 1 segundo; mude com -s.
nettop -L 60 -s 1 -P -J bytes_in,bytes_out,interface,stateCaptura uma amostra por segundo por 60 segundos, com só as colunas que importam, e sai. Pipe para um arquivo para análise depois.
-J para seleção de coluna
-J recebe lista separada por vírgula de nomes de coluna. Colunas úteis:
bytes_in,bytes_out— totais desde o início do processorx_dupe,rx_ooo— retransmissões TCP e pacotes fora de ordemre-tx— retransmissõesrtt_avg— round-trip time, útil para flagrar redes lentasrcvsize,tx_win— estado do buffer do socketinterface— qual interface (en0, utun0, lo0)state— estado da conexão (Established, TimeWait, Listen)
A lista completa está em man nettop. São cerca de 30 colunas; na maior parte do tempo bytes_in,bytes_out,interface,state é suficiente.
-x para XML
-x saída em formato plist XML — parseável, doloroso de ler, mas útil se quer alimentar nettop em outro script. Na prática a saída em colunas via -J e -L costuma ser mais fácil de trabalhar.
-k para esconder
-k <coluna> esconde uma coluna que você não quer. O oposto de -J. Use interativamente quando quer manter o display ao vivo mas tirar o ruído.
Lendo a saída
Algumas coisas para saber sobre os números que o nettop reporta:
Totais são desde o início do processo, não desde que você abriu o nettop. Um processo de longa vida como cloudd pode mostrar centenas de MB mesmo num sistema quieto. Use modo delta (d interativamente, ou compute deltas da saída de log -L) para ver taxas reais.
Cada linha é um flow, não um processo. Um único processo Chrome com 40 abas pode ter 40+ linhas. Agregue por PID você mesmo — nettop não faz.
Processos auxiliares aparecem pelo nome do helper. Google Chrome Helper (Renderer), Slack Helper, com.docker.backend. Não tem agrupamento. Você vê a visão crua do kernel.
Rotas podem surpreender. Uma conexão indo pelo túnel VPN vai mostrar interface utun0 ou similar, não en0. Se você vê tráfego numa interface que não reconhece, vale investigar.
Onde o nettop falha
Para uma ferramenta gratuita e built-in, o nettop é genuinamente útil. Mas há limites reais.
Sem histórico
Saiu do nettop, os dados se foram. Não tem arquivo de log, sem janela rolante, sem estado persistido. Se você não estava vendo quando o pico aconteceu, não viu. Modo log -L ajuda se você configurou antes do evento que quer capturar, mas isso é planejamento, não debugging.
Sem agrupamento de auxiliares
Como observado, você vê Google Chrome Helper (GPU), (Plugin), (Renderer), etc., como linhas separadas. Somar mentalmente entre 30 processos renderer de vida curta é tedioso e propenso a erro.
Só terminal
Uma sessão de nettop ao vivo toma uma janela do Terminal. Se quer dar uma olhada em "algo está usando banda agora?" enquanto escreve código, tem que trocar de contexto. Não tem widget na barra de menu, sem notificação, sem ícone na tray.
Nomes de coluna confusos
re-tx, rtt_var, tx_dupe — as colunas têm nomes de estatísticas TCP do kernel, não para humanos. A man page é sua amiga, mas a curva de aprendizado é real.
Sem filtros por app ou categoria
Você não pode dizer "me mostra só o Chrome e seus helpers" ou "me mostra tudo menos processos do sistema". Você filtra fazendo pipe para grep, o que funciona mas não é agradável.
Sem alertas
Se quer saber quando um app de repente começa a usar 50 MB/s, o nettop não te diz. Precisaria envolver num script de polling que faz diff de amostras e compara contra um threshold.
Veja o ova em ação
Um monitor de banda na barra de menu para olhar de relance — local, assinado, ~3 MB.
Por que uma UI ajuda
Na maior parte do tempo, você não quer mesmo saber estatísticas TCP por flow. Você quer saber:
- Algo está usando banda agora?
- Qual app é?
- Quanto cada app usou na última hora, dia, semana?
Um app de barra de menu como o ova lê aproximadamente os mesmos dados de kernel que o nettop, mas faz três coisas a mais:
- Agrupa processos auxiliares sob o app pai, então "Slack" é uma linha
- Armazena histórico localmente, então você pode navegar para trás e perguntar "o que aconteceu às 14:47"
- Vive na barra de menu, então fica a um relance enquanto você trabalha
Não é melhor que nettop — é diferente. nettop é uma ferramenta de debug que você puxa em momentos. Um monitor de banda é consciência ambiente.
Combinando nettop com outras ferramentas
nettop combina bem com algumas outras built-in.
nettop + lsof
nettop te mostra qual PID está usando banda. lsof -p <PID> te mostra cada arquivo e socket que aquele PID tem aberto. Juntas respondem "qual endpoint remoto esse app está falando?".
lsof -i -P -n -p 41218Lista cada socket IPv4/IPv6 aberto pelo PID 41218, com endereços e portas remotos.
nettop + log show
Se suspeitar de um serviço de sistema se comportando mal, o unified log costuma ter mais contexto que o nettop. Depois de flagrar um processo no nettop, rode:
log show --last 5m --predicate 'process == "cloudd"'…para ver o que o cloudd estava fazendo no mesmo tempo.
nettop + tcpdump
Quando precisa saber o que está de fato na linha, captura de pacote é a resposta. nettop te diz "Chrome está fazendo upload de 12 MB/s para 142.250.x.x". sudo tcpdump -i en0 host 142.250.x.x te diz se é HTTP/2 ou QUIC, qual era o SNI, quais códigos de resposta estão voltando.
Um exemplo concreto
Suponha que a ventoinha do seu laptop sobe enquanto você está ocioso. Cadeia de investigação:
- Abra um terminal, rode
nettop -P -L 5 -s 2 -J bytes_in,bytes_out,interface. - Leia a saída. Suponha que
clouddmostra 80 MB up em 10 segundos. - Rode
log show --last 1m --predicate 'process == "cloudd"' --info. - O log diz que o iCloud está fazendo upload de fotos tiradas no telefone hoje cedo.
- Decida se vai esperar, limitar o iCloud ou pausar o upload.
Essa sequência inteira leva uns 90 segundos. Se você tivesse instalado o ova no dia anterior, o passo 1 seria "olhar a barra de menu" e você já saberia que o cloudd era o culpado antes de abrir um terminal. O passo do unified log ainda se aplica.
Encerrando
nettop no macOS é uma ferramenta pequena, rápida e built-in que ninguém divulga. Quando você sabe que existe, é a resposta certa para "preciso ver o que está usando minha rede agora". Os limites são reais — sem histórico, sem agrupamento, só terminal — mas dentro do escopo é difícil de bater sendo gratuito.
Para consciência ambiente, histórico navegável e agrupamento por app sem digitar comando, você quer um app de barra de menu. O ova faz essa parte: cerca de 3 MB, macOS 14+, Apple Silicon e Intel, amostra a aproximadamente 1 Hz, armazena tudo localmente em disco. nettop e ova resolvem problemas adjacentes, e a maior parte dos usuários de macOS se beneficia de ter ambos.