CLI AI

Qual processo está comendo minha banda, sem nethogs

2026-08-25

ss -tnp mostra cada conexão junto do processo que a segura, e ss -ti acrescenta contadores de bytes por socket. Juntos, dão tráfego atribuído a um processo sem instalar coisa alguma — o que importa num servidor onde você é convidado, dentro de um contêiner, ou em qualquer lugar sem root para acrescentar pacotes.

1. Quem está conectado e de quem é o processo

clai
$ clai mostre as conexões estabelecidas com seus processos→ ss -tnp 'sport = :8099 or dport = :8099'State Recv-Q Send-Q  Local Address:Port  Peer Address:Port Process                              ESTAB 0      4190912     127.0.0.1:8099     127.0.0.1:52080 users:(("python3",pid=1120102,fd=4))ESTAB 324447 0           127.0.0.1:52080    127.0.0.1:8099  users:(("curl",pid=1120130,fd=4))

A coluna Process entrega nome e pid direto. Um Send-Q de quatro megabytes no lado que envia são dados que a aplicação já escreveu e a rede ainda não levou — sinal confiável de que é esse socket que está enchendo o cano.

2. Quantos bytes passaram por um socket

clai
$ clai mostre quantos bytes passaram por esta conexão→ ss -tin 'dport = :8099' | grep -oE 'bytes_sent:[0-9]+|bytes_received:[0-9]+'bytes_sent:85bytes_received:8579963

Essa é a parte que vale saber. O -i acrescenta estatísticas internas do TCP, e nelas há contadores de bytes por socket. Isso é "tráfego por processo" sem nethogs, porque o comando anterior já amarrou o socket a um pid.

3. Totais da interface

clai
$ clai mostre os contadores de tráfego da interface lo→ grep -E '^\s*lo:' /proc/net/dev | awk '{print "rx_bytes="$2, "tx_bytes="$10}'rx_bytes=581097986 tx_bytes=581097986

O /proc/net/dev existe em qualquer Linux, contêineres inclusive. São contadores desde o boot, então sozinhos não dizem nada — o sentido está na diferença entre duas leituras.

4. Vazão em um segundo

clai
$ clai meça a taxa de transferência na lo durante um segundo→ a=$(awk '/^ *lo:/{print $10}' /proc/net/dev); sleep 1; b=$(awk '/^ *lo:/{print $10}' /proc/net/dev); echo "$(( (b-a)/1024 )) KB/s"4764 KB/s

Duas leituras separadas por um segundo — é esse o princípio inteiro de qualquer medidor de banda. Troque lo por eth0 ou enp5s0.

5. Processos com mais conexões

clai
$ clai mostre quais processos têm mais conexões→ ss -tnp | awk 'NR>1 {match($0,/"[^"]+"/); if (RSTART) print substr($0,RSTART+1,RLENGTH-2)}' | sort | uniq -c | sort -rn | head -5

Quantidade de conexões não é tráfego, mas é um bom primeiro corte: um processo segurando cem sockets salta aos olhos. Depois confira os contadores de bytes do passo 2 para o seu suspeito.

6. Acompanhar em movimento

clai
$ clai atualize a lista de conexões a cada segundo→ watch -n1 "ss -tnp state established"

O ss não tem modo de repetição próprio, então o watch faz esse papel. É o parente pobre do iftop, com a vantagem de existir em toda máquina em que você entrar.

Gotchas

  • Número de conexões não é banda. Um socket pode puxar gigabytes enquanto cem conexões keep-alive ociosas não movem nada. As conexões acham o suspeito; os contadores do ss -ti são a prova.
  • Sem root você só vê os próprios processos. A coluna Process é preenchida para sockets alheios apenas com sudo. Campo vazio ao lado de uma conexão de outro significa "não é seu processo", e não "não há processo".
  • Contadores de interface incluem tudo da máquina. O /proc/net/dev também conta atualizações de pacotes, agentes de monitoramento e contêineres vizinhos. Para uma resposta precisa, olhe o socket, não a interface.

Related questions

Quando vale instalar o nethogs afinal? Quando você precisa de monitoramento contínuo e confortável por processo. O ss cobre um diagnóstico pontual; encarar ele por horas é outra história.

Como vejo o tráfego de um contêiner? Os contadores dele ficam no próprio namespace de rede: docker exec <nome> cat /proc/net/dev mostra exatamente o tráfego daquele contêiner.

Como distingo link saturado de aplicação lenta? Uma Send-Q crescendo com taxa estável significa que a aplicação escreve mais rápido do que a rede drena. Send-Q vazia com vazão baixa aponta para a aplicação ou para a ponta remota.

See also

O CliAI monta esses filtros do ss a partir de uma frase comum, para você não guardar a sintaxe na cabeça. Instale em uma linha.