Cuando un servidor va lento, lo primero es averiguar qué recurso está saturado (CPU, memoria, disco o red) y qué proceso lo provoca. Cuatro herramientas de terminal cubren esos cuatro frentes: top y htop para CPU y memoria, iotop para la entrada y salida de disco, e iftop para el tráfico de red. En esta guía las instalarás en Ubuntu 24.04, aprenderás a leer su salida y a usarlas juntas para diagnosticar un problema de rendimiento.

Requisitos previos

  • Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath.
  • Un usuario no root con privilegios sudo. iotop e iftop necesitan privilegios de root.
  • Acceso por SSH con una terminal de al menos 80 columnas para que htop e iftop se vean bien.

Paso 1: Instalar las herramientas

top forma parte del paquete procps y ya está instalado. Instala las otras tres desde los repositorios de Ubuntu:

sudo apt update
sudo apt install htop iotop iftop

Comprueba que están disponibles:

htop --version
command -v iotop iftop
htop 3.3.0
/usr/sbin/iotop
/usr/sbin/iftop

Paso 2: Ver el estado general con top

Lanza top:

top

La cabecera resume el estado del sistema:

top - 10:31:05 up 12 days,  3:14,  1 user,  load average: 1.84, 1.20, 0.95
Tasks: 142 total,   2 running, 140 sleeping,   0 stopped,   0 zombie
%Cpu(s): 46.2 us,  3.1 sy,  0.0 ni, 49.7 id,  0.8 wa,  0.0 hi,  0.1 si,  0.1 st
MiB Mem :   3915.4 total,    312.6 free,   2104.8 used,   1780.3 buff/cache
MiB Swap:   2048.0 total,   2031.5 free,     16.5 used.   1810.6 avail Mem

Los valores que más importan:

  • load average: media de procesos ejecutándose o esperando en los últimos 1, 5 y 15 minutos. Compáralo con el número de vCPU (nproc): un load sostenido por encima de ese número indica que hay cola.
  • us / sy: porcentaje de CPU en código de usuario y del kernel.
  • wa (iowait): CPU esperando al disco. Si es alto, el cuello de botella es el disco y la herramienta adecuada es iotop.
  • st (steal): tiempo que el hipervisor no ha dado a tu máquina virtual. Valores altos y sostenidos indican falta de CPU en el host.
  • avail Mem: memoria realmente disponible para nuevos procesos. No te fijes en free: Linux usa la memoria libre como caché de disco (buff/cache) y la libera cuando hace falta.

En la lista de procesos, las columnas clave son %CPU, %MEM, RES (memoria física que usa el proceso) y S (estado: R en ejecución, S durmiendo, D esperando E/S, Z zombi).

Teclas útiles dentro de top:

TeclaAcción
POrdenar por CPU (por defecto)
MOrdenar por memoria
1Mostrar cada CPU por separado
cMostrar el comando completo
uFiltrar por usuario
kEnviar una señal a un PID
WGuardar la configuración actual en ~/.config/procps/toprc
qSalir

top también sirve para capturas no interactivas, por ejemplo para guardarlas en un fichero o incluirlas en un informe. Este comando hace una sola iteración, ordenada por memoria, y muestra las primeras líneas:

top -b -n 1 -o %MEM | head -n 15

Otras opciones habituales son -d 2 (refrescar cada 2 segundos), -u www-data (solo procesos de ese usuario) y -p 1234 (vigilar un PID concreto).

Paso 3: Analizar procesos con htop

htop muestra la misma información de forma más legible, con barras por CPU, desplazamiento con el ratón y búsqueda:

htop

En la parte superior verás una barra por cada vCPU, la memoria y el swap. Los colores de la barra de CPU indican el tipo de uso: verde para procesos de usuario, rojo para el kernel y, según el esquema de color, otros tonos para steal o iowait (pulsa F1 para ver la leyenda).

Atajos de teclado:

TeclaAcción
F3 o /Buscar un proceso por nombre
F4 o \Filtrar la lista (solo muestra coincidencias)
F5 o tVista de árbol (padres e hijos)
F6Elegir la columna de ordenación
M / POrdenar por memoria / CPU
HOcultar o mostrar los hilos de usuario
uFiltrar por usuario
EspacioMarcar procesos (para actuar sobre varios)
F9 o kEnviar una señal a los procesos seleccionados
F2Configurar columnas y medidores

La vista de árbol es especialmente útil con servicios que lanzan workers (Nginx, PHP-FPM, Gunicorn): verás que el consumo está repartido entre los hijos de un único servicio. Pulsar H para ocultar los hilos evita que una aplicación Java o Node.js aparezca decenas de veces.

También puedes arrancar htop ya filtrado u ordenado:

htop -u www-data
htop --tree
htop -s PERCENT_MEM

Paso 4: Encontrar qué proceso usa el disco con iotop

Si top muestra un wa alto o el servidor va lento sin gastar CPU, busca quién está leyendo o escribiendo en disco.

En los kernels recientes, la contabilidad de retrasos por tarea que usa iotop para las columnas SWAPIN e IO> viene desactivada. Actívala mientras diagnosticas:

sudo sysctl kernel.task_delayacct=1
kernel.task_delayacct = 1

Lanza iotop mostrando solo los procesos que están haciendo E/S (-o), agrupados por proceso en lugar de por hilo (-P):

sudo iotop -o -P
Total DISK READ:         0.00 B/s | Total DISK WRITE:        38.27 M/s
Actual DISK READ:        0.00 B/s | Actual DISK WRITE:       41.02 M/s
    PID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
   1873 be/4 mysql       0.00 B/s   37.90 M/s  0.00 % 62.15 % mysqld
    412 be/3 root        0.00 B/s  376.12 K/s  0.00 %  4.03 % [jbd2/vda1-8]
  • DISK READ / DISK WRITE: velocidad de lectura y escritura de cada proceso.
  • IO>: porcentaje del tiempo que el proceso ha pasado esperando E/S. Es el mejor indicador de quién sufre el cuello de botella.
  • SWAPIN: tiempo esperando a que se lean páginas del swap. Si es alto, el problema real es falta de memoria.

Con -a verás los totales acumulados desde que abriste iotop, útil para procesos que escriben a ráfagas. Para una captura no interactiva, por ejemplo 5 muestras cada 2 segundos:

sudo iotop -o -P -b -n 5 -d 2

Cuando termines, puedes volver a desactivar la contabilidad con sudo sysctl kernel.task_delayacct=0. El cambio con sysctl no persiste tras reiniciar.

Paso 5: Ver el tráfico de red por conexión con iftop

iftop muestra el ancho de banda de cada conexión en una interfaz. Primero averigua el nombre de la interfaz pública:

ip -br address
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             203.0.113.10/24 2001:db8::10/64

Lanza iftop en esa interfaz, sin resolver nombres DNS (-n), sin traducir puertos a nombres de servicio (-N), mostrando los puertos (-P) y con unidades en bytes (-B):

sudo iftop -i eth0 -n -N -P -B
                 1.91MB          3.81MB          5.72MB          7.63MB     9.54MB
+----------------+---------------+---------------+---------------+--------------
203.0.113.10:443          => 198.51.100.24:51544     2.10MB  1.85MB  1.20MB
                          <=                          41.2KB  38.0KB  25.1KB
203.0.113.10:22           => 192.0.2.50:60122         3.20KB  2.90KB  2.75KB
                          <=                          1.10KB  1.05KB  1.00KB
--------------------------------------------------------------------------------
TX:             cum:   48.2MB   peak:   2.31MB   rates:   2.10MB  1.86MB  1.21MB
RX:                    1.02MB           52.4KB             42.3KB  39.1KB  26.1KB
TOTAL:                 49.2MB           2.36MB             2.14MB  1.90MB  1.24MB

Cada conexión ocupa dos líneas: => es tráfico enviado por el servidor y <= el recibido. Las tres columnas de la derecha son medias de 2, 10 y 40 segundos. Abajo tienes los totales enviados (TX), recibidos (RX), el acumulado y el pico.

Teclas dentro de iftop: P pausa la pantalla, t cambia la forma de mostrar enviado y recibido, s y d ocultan el host de origen o destino (útil para agrupar), 1, 2 y 3 ordenan por cada una de las medias, y q sale.

Puedes limitar la captura con un filtro al estilo de tcpdump mediante -f. Por ejemplo, solo tráfico HTTPS:

sudo iftop -i eth0 -n -P -f "port 443"

Y para obtener un informe en texto durante 10 segundos, sin interfaz interactiva:

sudo iftop -i eth0 -n -N -P -t -s 10

Paso 6: Diagnosticar un problema de rendimiento paso a paso

Usa las herramientas en este orden cuando algo va lento:

  1. Abre top y mira la cabecera. Anota el load average, us, wa, st y avail Mem.
  2. Según lo que veas, elige la herramienta:
Síntoma en topRecurso probableSiguiente paso
us o sy altos, load por encima de nprocCPUhtop, ordenar por CPU, vista de árbol
avail Mem bajo y swap creciendoMemoriahtop ordenado por M, revisar RES
wa alto, procesos en estado DDiscosudo iotop -o -P
st alto y sostenidoCPU del hostNada que corregir dentro de la VM; valora más vCPU
CPU y disco tranquilos, respuestas lentasRedsudo iftop -i eth0 -n -P
  1. Identifica el proceso, y a partir del PID relaciónalo con su servicio:
ps -o pid,user,cmd -p 1873
systemctl status 1873

systemctl status acepta un PID y muestra a qué unidad pertenece, lo que te dice qué servicio revisar, reiniciar o limitar.

Solución de problemas

iotop muestra CONFIG_TASK_DELAY_ACCT not enabled in kernel, cannot determine SWAPIN and IO %. Activa la contabilidad con sudo sysctl kernel.task_delayacct=1, como en el paso 4.

iftop: pcap_open_live(eth0): eth0: No such device exists. El nombre de interfaz es otro (ens3, enp1s0...). Consúltalo con ip -br address.

iftop muestra direcciones pero ningún tráfico. Estás mirando una interfaz sin tráfico, como una red privada. Cambia de interfaz o quita el filtro -f.

Los colores de htop no se ven bien. Pulsa F2, entra en Colors y elige otro esquema, o exporta TERM=xterm-256color en tu sesión.

Conclusión

Con top identificas qué recurso está saturado, con htop localizas y gestionas los procesos que consumen CPU y memoria, con iotop encuentras quién castiga el disco y con iftop qué conexiones ocupan el ancho de banda. Son herramientas de diagnóstico en tiempo real; para tener histórico y alertas, el siguiente paso es instalar un sistema de métricas como Prometheus con node_exporter o Netdata, y revisar los logs del sistema en /var/log para entender por qué se produjo el pico.