CLI AI

Qué proceso se come mi ancho de banda, sin nethogs

2026-08-25

ss -tnp muestra cada conexión junto al proceso que la sostiene, y ss -ti añade contadores de bytes por socket. Entre los dos obtienes el tráfico atribuido a un proceso sin instalar nada, lo que importa en un servidor donde eres invitado, dentro de un contenedor, o en cualquier sitio donde no tengas root para añadir paquetes.

1. Quién está conectado y de quién es el proceso

clai
$ clai muestra las conexiones establecidas con sus procesos→ 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))

La columna Process te da el nombre y el pid directamente. Un Send-Q de cuatro megabytes en el lado emisor son datos que la aplicación ya escribió y la red todavía no se ha llevado: señal fiable de que ese socket es el que llena el tubo.

2. Cuántos bytes pasaron por un socket

clai
$ clai muestra cuántos bytes pasaron por esta conexión→ ss -tin 'dport = :8099' | grep -oE 'bytes_sent:[0-9]+|bytes_received:[0-9]+'bytes_sent:85bytes_received:8579963

Esta es la parte que conviene saber. -i añade estadísticas internas de TCP, que incluyen contadores de bytes por socket. Eso es "tráfico por proceso" sin nethogs, porque el comando anterior ya ató el socket a un pid.

3. Totales del interfaz

clai
$ clai muestra los contadores de tráfico del interfaz lo→ grep -E '^\s*lo:' /proc/net/dev | awk '{print "rx_bytes="$2, "tx_bytes="$10}'rx_bytes=581097986 tx_bytes=581097986

/proc/net/dev existe en cualquier sistema Linux, contenedores incluidos. Son contadores desde el arranque, así que por sí solos no significan nada: el significado está en la diferencia entre dos lecturas.

4. Caudal durante un segundo

clai
$ clai mide la velocidad de transferencia en lo durante un 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

Dos lecturas separadas por un segundo: ese es todo el principio de cualquier medidor de ancho de banda. Cambia lo por eth0 o enp5s0.

5. Procesos con más conexiones

clai
$ clai muestra qué procesos tienen más conexiones→ ss -tnp | awk 'NR>1 {match($0,/"[^"]+"/); if (RSTART) print substr($0,RSTART+1,RLENGTH-2)}' | sort | uniq -c | sort -rn | head -5

El número de conexiones no es tráfico, pero es un buen primer corte: un proceso con cien sockets salta a la vista. Después mira los contadores de bytes del paso 2 para tu sospechoso.

6. Verlo en movimiento

clai
$ clai refresca la lista de conexiones cada segundo→ watch -n1 "ss -tnp state established"

ss no tiene modo de repetición propio, así que lo pone watch. Es el pariente pobre de iftop, disponible en cualquier máquina en la que entres.

Gotchas

  • El número de conexiones no es ancho de banda. Un socket puede tirar de gigabytes mientras cien conexiones keep-alive ociosas no mueven nada. Las conexiones encuentran al sospechoso; los contadores de ss -ti son la prueba.
  • Sin root solo ves tus propios procesos. La columna Process se rellena para sockets de otros usuarios únicamente con sudo. Un campo vacío junto a una conexión ajena significa "no es tu proceso", no "no hay proceso".
  • Los contadores del interfaz incluyen todo lo de la máquina. /proc/net/dev también cuenta actualizaciones de paquetes, agentes de monitorización y contenedores vecinos. Para una respuesta precisa mira el socket, no el interfaz.

Related questions

¿Cuándo merece la pena instalar nethogs? Cuando necesitas monitorización continua y cómoda por proceso. ss cubre un diagnóstico puntual; mirarlo durante horas es otra cosa.

¿Cómo veo el tráfico de un contenedor? Sus contadores viven en su propio espacio de nombres de red: docker exec <nombre> cat /proc/net/dev muestra exactamente el tráfico de ese contenedor.

¿Cómo distingo un enlace saturado de una aplicación lenta? Una Send-Q que crece a velocidad constante significa que la aplicación escribe más rápido de lo que la red drena. Una Send-Q vacía con poco caudal apunta a la aplicación o al extremo remoto.

See also

CliAI construye estos filtros de ss a partir de una frase normal, para que no tengas que recordar la sintaxis. Instálalo en una línea.