¿Cómo monitorizar el uso de recursos en los procesos en Linux?

Aprender Certificado Fundación Linux en España contenido Técnicos desde Cero en CiberED

Un administrador de sistemas debe ser capaz de evaluar el estado de los procesos y los recursos del sistema en tiempo real o a través de históricos.

14.1. Introducción

La monitorización permite detectar cuellos de botella de CPU, memoria, entrada/salida y red, así como identificar procesos que consumen en exceso o se han bloqueado.

En este capítulo, aprenderás las herramientas fundamentales: desde las clásicas ps, top y free, hasta soluciones más detalladas como pidstat, vmstat, iostat, sar y el sistema de archivos /proc. Todas ellas forman parte del repertorio que LFCS espera que manejes.

14.2. Listado de procesos con ps

El comando ps (process status) proporciona una instantánea de los procesos actuales. Su sintaxis admite opciones con y sin guiones (estilo BSD, Unix y GNU). Las más útiles son:

  • ps aux – muestra todos los procesos del sistema con formato BSD detallado.
  • ps -ef – estilo Unix, similar pero con distinta presentación.
  • ps -e --forest – muestra la jerarquía de procesos en árbol.

14.2.1. Columnas clave

ColumnaSignificado
USERPropietario del proceso
PIDID del proceso
%CPUPorcentaje de CPU utilizado (respecto al tiempo total de CPU desde que se inició)
%MEMPorcentaje de memoria física utilizada
VSZTamaño de memoria virtual (en KiB)
RSSTamaño de memoria residente (memoria física real, sin swap)
TTYTerminal asociada (? para ninguno)
STATEstado: R (running), S (sleeping), D (uninterruptible sleep), Z (zombie), T (stopped)
STARTHora de inicio
TIMETiempo total de CPU consumido
COMMANDLínea de comandos (puede truncarse; con ps auxww se muestra completa)

Ejemplos prácticos:

ps aux | grep nginx
ps -eo pid,user,%cpu,%mem,comm --sort=-%mem | head
ps -ef --forest   # ver árbol de procesos

Opciones de formato personalizado con -o permiten seleccionar exactamente las columnas deseadas, muy útil para scripts.

14.3. Monitorización interactiva con top

El comando top proporciona una vista en tiempo real de los procesos y los recursos del sistema. Se ejecuta en la terminal y se actualiza cada 3 segundos por defecto.

14.3.1. Áreas de la pantalla

  • Parte superior (resumen del sistema):

    • top - hora, uptime, número de usuarios y carga media (load average) de 1, 5 y 15 minutos.
    • Tasks: procesos totales, en ejecución, durmiendo, detenidos, zombies.
    • %Cpu(s): desglose de uso de CPU (usuario, sistema, nice, idle, iowait, etc.).
    • MiB Mem: memoria total, libre, usada, buffers/caché.
    • MiB Swap: uso de swap.
  • Lista de procesos (ordenados por %CPU por defecto).

14.3.2. Comandos interactivos

TeclaAcción
hAyuda
kMatar un proceso (pide PID y señal)
rCambiar prioridad (renice)
fElegir columnas mostradas
oCambiar orden (por CPU, memoria, PID, etc.)
cMostrar línea de comandos completa
VVista en árbol
MOrdenar por memoria
POrdenar por CPU
TOrdenar por tiempo de ejecución
1Expandir/colapsar CPUs individuales
ECambiar unidades de memoria (MiB, GiB, etc.)

Para salir: q.

Se puede ejecutar top en modo batch para capturas rápidas:

top -b -n 1

14.3.3. htop – alternativa mejorada

htop ofrece una interfaz más visual, con colores, uso de ratón y navegación por teclado intuitiva. Se instala con apt install htop / yum install htop. Permite matar procesos con F9, renice con F7/F8, y ver árboles con F5. Aunque no siempre está disponible en el examen, es bueno conocerlo para el día a día.

14.4. Estadísticas por proceso con pidstat

Parte del paquete sysstat, pidstat muestra actividad de CPU, memoria, E/S y más por proceso. Muy útil para análisis históricos y detección de consumo excesivo.

Uso de CPU por proceso cada 1 segundo:

pidstat 1

Incluir estadísticas de memoria (-r), E/S (-d) y fallos de página (-u):

pidstat -r 2 5    # cada 2 seg, 5 muestras
pidstat -d         # actividad de disco

Ver todos los procesos, incluidos los que no tienen actividad reciente:

pidstat -p ALL

Columnas útiles:

  • %usr, %system, %guest, %CPU (porcentaje de CPU)
  • minflt/s, majflt/s (fallos de página menores y mayores)
  • VSZ, RSS (memoria)
  • kB_rd/s, kB_wr/s, kB_ccwr/s (lectura/escritura disco)

14.5. Estadísticas globales del sistema

14.5.1. vmstat – memoria y procesos

El comando vmstat informa sobre procesos, memoria, paginación, bloques de E/S, interrupciones y cambios de contexto.

vmstat 2 5   # cada 2 seg, 5 informes

Columnas: r (procesos en cola de ejecución), b (bloqueados), swpd (swap usado), free, buff, cache, si/so (swap in/out), bi/bo (bloques leídos/escritos en disco), us/sy/id/wa (porcentajes de CPU: usuario, sistema, idle, iowait).

Si wa es persistentemente alto, indica cuello de botella de E/S.

14.5.2. iostat – uso de disco y CPU

También del paquete sysstat, muestra la carga de E/S de los dispositivos de almacenamiento.

iostat -x 2 3    # estadísticas extendidas cada 2 segundos

Campos clave: await (tiempo medio de espera), svctm, %util (porcentaje de utilización del disco), r/s, w/s (operaciones de lectura/escritura por segundo), rkB/s, wkB/s.

Una utilización cercana al 100% con tiempos altos indica saturación del almacenamiento.

14.5.3. mpstat – uso de CPU por núcleo

Muestra la actividad de cada CPU por separado.

mpstat -P ALL 1

Ideal para detectar desequilibrios o ver si un proceso usa un solo núcleo.

14.5.4. sar – colector de datos históricos

sar puede recopilar y mostrar datos en tiempo real o del pasado (si el servicio sysstat está activo). Sintaxis común:

  • Uso de CPU: sar -u 1 3
  • Memoria: sar -r
  • Swap: sar -S
  • E/S de disco: sar -b o sar -d
  • Red: sar -n DEV (tráfico por interfaz)

Por ejemplo, para ver el tráfico de red en tiempo real:

sar -n DEV 1

Para datos históricos (del día actual por defecto): sar -u -f /var/log/sa/saXX (donde XX es el día del mes).

sar es muy potente, pero para el examen LFCS basta con conocer su sintaxis básica y saber que los datos históricos se guardan en /var/log/sa/.

14.5.5. free – memoria y swap

free -h   # humano: MiB/GiB
free -m   # en MiB

Muestra memoria total, usada, libre, compartida, buffers/caché y disponible. La columna available es la más fiable para saber cuánta memoria hay realmente para nuevos procesos (incluye caché que se puede liberar).

14.5.6. uptime – carga del sistema

uptime

Proporciona la hora actual, tiempo de actividad y la carga media de 1, 5 y 15 minutos. Una carga superior al número de CPUs lógicas indica sobrecarga.

14.6. El sistema de archivos /proc

/proc es un sistema de archivos virtual que expone información del kernel y los procesos. Para monitorización destacan:

  • /proc/cpuinfo – información de CPUs.
  • /proc/meminfo – detalles de memoria (más completo que free).
  • /proc/loadavg – carga media y procesos en ejecución.
  • /proc/uptime – segundos desde el arranque y tiempo idle.
  • /proc/stat – estadísticas del sistema (CPU, interrupciones, arranque).
  • /proc/<PID>/status – estado detallado de un proceso.
  • /proc/<PID>/stat – estadísticas en formato máquina (usado por ps).
  • /proc/<PID>/io – E/S del proceso.
  • /proc/<PID>/fd/ – enlaces a los archivos abiertos por el proceso.

Ejemplo para obtener la memoria usada por un proceso:

grep VmRSS /proc/1234/status

Es útil para scripting, aunque en LFCS basta con saber que existe y poder extraer datos puntuales.

14.7. Herramientas para buscar procesos

14.7.1. pgrep – buscar por nombre

pgrep -l nginx
pgrep -u www-data
pgrep -x sshd   # coincidencia exacta

14.7.2. pidof – PID de un programa

pidof sshd
pidof -s nginx   # un solo PID

14.7.3. pkill – matar procesos por nombre

pkill -HUP nginx
pkill -9 -u juan   # terminar todos los procesos del usuario juan

(Se debe usar con precaución)

14.8. Monitorización de red

Aunque la monitorización de red se trata en profundidad en el capítulo 29, un vistazo rápido aquí:

  • ss -tulnp : sockets escuchando o establecidos (reemplazo de netstat).
  • iftop : tráfico en tiempo real por interfaz (requiere instalación).
  • nethogs : tráfico por proceso (también externo).

Dentro del alcance de este capítulo, sar -n DEV o ip -s link son útiles.

14.9. Ejercicios prácticos

  1. Análisis con ps: Lista todos los procesos que consumen más del 5% de memoria. Muestra PID, usuario, %MEM y comando completo. Y encuentra todos los procesos en estado zombie (Z). ¿Qué significan y cómo se eliminan?

  2. top interactivo: Ordena por memoria (M), identifica el que más consume y cambia su prioridad (renice) con r a 10 (menos prioridad). Y muestra solo los procesos de un usuario concreto (pista: u en top).

  3. pidstat: Monitoriza la actividad de E/S de un proceso específico (si existe nginx o similar). Usa pidstat -d -p PID 1 5. Vigila los fallos de página de un proceso; un alto majflt/s puede indicar escasez de memoria.

  4. Estadísticas del sistema: Ejecuta vmstat 2 5 durante una transferencia de archivos grandes (usa dd). Interpreta las columnas bi, bo y wa. Con iostat -x 1 mientras ejecutas stress --io 2 (si instalas stress), observa cómo sube %util. Y utiliza free -h antes y después de iniciar un programa que consuma mucha memoria.

  5. /proc: Encuentra el PID de sshd y examina /proc/<PID>/status. Extrae VmSize, VmRSS y Threads. Y mira los archivos abiertos por ese proceso con ls -l /proc/<PID>/fd.

  6. Búsqueda y señales: Usa pgrep para localizar procesos de cron y envía la señal SIGHUP a cron con pkill -HUP cron para que relea su configuración.

14.10. Resumen y consejos para LFCS

  • ps aux y top son los comandos básicos que debes manejar a la perfección.
  • Aprende a interpretar la carga media del sistema (uptime) y los estados de los procesos (D, Z, S).
  • pidstat y vmstat/iostat son herramientas muy valoradas en el examen; practica su salida e interpretación.
  • No necesitas memorizar todas las columnas, pero sí saber cómo encontrar rápidamente un alto consumo de CPU, memoria o E/S.
  • Recuerda que /proc está siempre disponible; puedes consultar sus archivos sin instalar nada adicional.
  • La capacidad de localizar y terminar procesos problemáticos de forma segura (pgrep, pkill, señales adecuadas) es una habilidad transversal que también aparece en otros temas.

Con estas herramientas puedes diagnosticar y mantener el rendimiento del sistema. En el próximo capítulo exploraremos cómo establecer parámetros del kernel en tiempo de ejecución (sysctl), otro pilar de la administración avanzada de Linux.

Vistas: 0

Descubre más desde CIBERED

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Scroll al inicio