--- title: "Monitorizar recursos en Linux con top, htop, iotop e iftop" description: "Aprende a usar top, htop, iotop e iftop en Ubuntu 24.04 para localizar qué proceso consume CPU, memoria, disco o red en tu servidor y actuar sobre él." category: "Monitoring Logging" language: es source: https://cubepath.com/es/docs/monitoring-logging/monitoreo-de-recursos-con-comandos-basicos-top-htop-iotop-iftop updated: 2026-09-25 --- # Monitorizar recursos en Linux con top, htop, iotop e iftop 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: ```bash sudo apt update sudo apt install htop iotop iftop ``` Comprueba que están disponibles: ```bash htop --version command -v iotop iftop ``` ```output htop 3.3.0 /usr/sbin/iotop /usr/sbin/iftop ``` > Nota: en Rocky Linux 9, `htop` e `iftop` están en EPEL. Instala primero `sudo dnf install epel-release` y después `sudo dnf install htop iotop iftop`. ## Paso 2: Ver el estado general con top Lanza `top`: ```bash top ``` La cabecera resume el estado del sistema: ```output 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: ```bash 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: ```bash 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: ```bash htop -u www-data htop --tree htop -s PERCENT_MEM ``` > Consejo: para terminar un proceso, primero envía `SIGTERM` (15), que le deja cerrar de forma ordenada. Usa `SIGKILL` (9) solo si no responde. Si el proceso pertenece a un servicio de systemd, es mejor `sudo systemctl restart nombre` para 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: ```bash sudo sysctl kernel.task_delayacct=1 ``` ```output 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`): ```bash sudo iotop -o -P ``` ```output 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: ```bash 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: ```bash ip -br address ``` ```output 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`): ```bash sudo iftop -i eth0 -n -N -P -B ``` ```output 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: ```bash sudo iftop -i eth0 -n -P -f "port 443" ``` Y para obtener un informe en texto durante 10 segundos, sin interfaz interactiva: ```bash 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 `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` | 3. Identifica el proceso, y a partir del PID relaciónalo con su servicio: ```bash 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.