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.iotopeiftopnecesitan privilegios de root. - Acceso por SSH con una terminal de al menos 80 columnas para que
htopeiftopse 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
Notaen Rocky Linux 9,
htopeiftopestán en EPEL. Instala primerosudo dnf install epel-releasey despuéssudo dnf install htop iotop 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:
| Tecla | Acción |
|---|---|
P | Ordenar por CPU (por defecto) |
M | Ordenar por memoria |
1 | Mostrar cada CPU por separado |
c | Mostrar el comando completo |
u | Filtrar por usuario |
k | Enviar una señal a un PID |
W | Guardar la configuración actual en ~/.config/procps/toprc |
q | Salir |
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:
| Tecla | Acción |
|---|---|
F3 o / | Buscar un proceso por nombre |
F4 o \ | Filtrar la lista (solo muestra coincidencias) |
F5 o t | Vista de árbol (padres e hijos) |
F6 | Elegir la columna de ordenación |
M / P | Ordenar por memoria / CPU |
H | Ocultar o mostrar los hilos de usuario |
u | Filtrar por usuario |
Espacio | Marcar procesos (para actuar sobre varios) |
F9 o k | Enviar una señal a los procesos seleccionados |
F2 | Configurar 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
Consejopara terminar un proceso, primero envía
SIGTERM(15), que le deja cerrar de forma ordenada. UsaSIGKILL(9) solo si no responde. Si el proceso pertenece a un servicio de systemd, es mejorsudo systemctl restart nombrepara que systemd no lo trate como una caída.
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:
- Abre
topy mira la cabecera. Anota el load average,us,wa,styavail Mem. - Según lo que veas, elige la herramienta:
Síntoma en top | Recurso probable | Siguiente paso |
|---|---|---|
us o sy altos, load por encima de nproc | CPU | htop, ordenar por CPU, vista de árbol |
avail Mem bajo y swap creciendo | Memoria | htop ordenado por M, revisar RES |
wa alto, procesos en estado D | Disco | sudo iotop -o -P |
st alto y sostenido | CPU del host | Nada que corregir dentro de la VM; valora más vCPU |
| CPU y disco tranquilos, respuestas lentas | Red | sudo iftop -i eth0 -n -P |
- 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.
