Introducción

Uno de los pilares del trabajo de un administrador de sistemas o DevOps es saber qué está pasando con el hardware del servidor. Y la CPU es, sin duda, el componente más crítico: si la CPU está al 100% todo el tiempo, tu aplicación va a responder lento, los usuarios se van a quejar y tú vas a terminar debuggeando a las 3 de la mañana.

En este primer artículo de la serie «Monitorización de Hardware» vamos a explorar todas las herramientas que Linux pone a tu disposición para entender el estado de la CPU: desde las más básicas (/proc/cpuinfo, lscpu) hasta las más avanzadas (perf, turbostat).

¡Empezamos! 🚀

/proc/cpuinfo — La fuente de la verdad

Todo en Linux es un archivo, y la información de la CPU no es la excepción. /proc/cpuinfo contiene los detalles de cada núcleo del procesador:

cat /proc/cpuinfo

La salida es extensa, pero lo más relevante que debes saber leer:

  • processor: Número de cada núcleo lógico (0, 1, 2, 3…).
  • vendor_id: Fabricante (GenuineIntel, AuthenticAMD).
  • model name: Nombre completo del procesador (ej: «Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz»).
  • cpu cores: Núcleos físicos por socket.
  • siblings: Núcleos lógicos (si hay hyperthreading, siblings > cpu cores).
  • flags: Capacidades del procesador (vmx para virtualización, aes para cifrado por hardware, etc.).

Si solo quieres contar cuántos núcleos tienes:

grep -c "processor" /proc/cpuinfo         # Núcleos lógicos
grep "cpu cores" /proc/cpuinfo | head -1  # Núcleos físicos

lscpu — Información resumida y clara

lscpu toma la información de /proc/cpuinfo y la presenta de forma legible:

lscpu

Salida típica:

Architecture:            x86_64
CPU op-mode(s):          32-bit, 64-bit
CPU(s):                  8
Thread(s) per core:      2
Core(s) per socket:      4
Socket(s):               1
Model name:              Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
CPU MHz:                 2394.000
L1d cache:               32K
L1i cache:               32K
L2 cache:                256K
L3 cache:                25600K

Los campos clave:

  • CPU(s): Total de núcleos lógicos.
  • Thread(s) per core: Si es 2, hay HyperThreading activado.
  • Core(s) per socket: Núcleos físicos por CPU.
  • Socket(s): Cantidad de CPUs físicas instaladas.
  • CPU MHz: Frecuencia actual (puede variar con el escalado de frecuencia).
  • Cachés L1/L2/L3: Tamaño de cada nivel de caché.

top y htop — Monitoreo en tiempo real

top es el clásico monitor de procesos. Muestra en tiempo real el uso de CPU, memoria y otros recursos:

top

La línea de resumen de CPU en top es muy informativa:

%Cpu(s): 12.5 us,  3.2 sy,  0.0 ni, 83.9 id,  0.3 wa,  0.0 hi,  0.1 si,  0.0 st

¿Qué significa cada campo?

  • us (user): Tiempo de CPU usado por procesos de usuario.
  • sy (system): Tiempo de CPU usado por el kernel.
  • ni (nice): Tiempo de CPU usado por procesos con prioridad ajustada (nice).
  • id (idle): CPU inactiva. Si esto está bajo, hay cuello de botella.
  • wa (iowait): CPU esperando operaciones de E/S (disco o red). Un valor alto indica problemas de almacenamiento.
  • hi (hardware irq): Interrupciones de hardware.
  • si (software irq): Interrupciones de software.
  • st (steal): Tiempo «robado» por el hipervisor en máquinas virtuales. Si ves steal alto, tu VM está compitiendo con otras.

htop es una versión mejorada de top con interfaz a color, scroll y atajos de teclado intuitivos:

htop

Si no está instalado:

sudo apt install htop     # Debian/Ubuntu
sudo yum install htop     # CentOS/RHEL

mpstat — Estadísticas por núcleo

mpstat forma parte del paquete sysstat. Muestra estadísticas de CPU detalladas, incluso por cada núcleo individual:

mpstat -P ALL 2 5          # Todos los núcleos, cada 2 segundos, 5 veces

Salida típica:

CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %idle
all    15.20    0.00    4.30    1.10    0.00    0.20    0.00   79.20
0      12.50    0.00    3.80    0.50    0.00    0.10    0.00   83.10
1      18.30    0.00    5.10    2.00    0.00    0.30    0.00   74.30

Esto es increíblemente útil cuando tienes un proceso que satura un solo núcleo (problema común en aplicaciones monohilo) y quieres identificarlo rápidamente.

vmstat — Visión general del sistema

vmstat reporta información sobre procesos, memoria, swap, E/S y CPU:

vmstat 2 10                # Cada 2 segundos, 10 muestras

Columnas relevantes para CPU:

  • r: Procesos en cola de ejecución (esperando CPU). Si este número es mayor que la cantidad de núcleos, hay sobrecarga.
  • b: Procesos bloqueados (esperando E/S).
  • us: CPU de usuario.
  • sy: CPU del sistema.
  • id: CPU inactiva.
  • wa: IOWait.
  • st: Steal time (en VMs).

Regla práctica: si r es consistentemente mayor al número de núcleos y id está bajo, tu CPU está saturada.

uptime — Load Average

El comando uptime muestra tres números conocidos como «load average»:

uptime
# 14:23:15 up 45 days,  3:12,  2 users,  load average: 1.25, 1.80, 2.10

Los tres valores representan la carga promedio en los últimos 1, 5 y 15 minutos. Pero hay que interpretarlos correctamente:

  • No es porcentaje. Un load de 1.0 en un sistema con 1 núcleo significa 100% de uso. En un sistema con 4 núcleos, 1.0 significa solo 25%.
  • Divide por el número de núcleos. En un sistema de 4 núcleos, load 2.0 es 50% de uso. Load 4.0 es 100%.
  • Si el load de 1 minuto es mucho mayor que el de 15 minutos: hay un pico reciente de actividad.
  • Si los tres son altos y sostenidos: el sistema está crónicamente sobrecargado.

perf — Análisis profundo de rendimiento

perf es la herramienta de profiling más potente de Linux. Utiliza contadores de hardware de la CPU para analizar el rendimiento a nivel de instrucciones:

# Estadísticas básicas
perf stat sleep 5

# Muestreo de eventos de CPU
perf record -a -g sleep 10
perf report

# Contar eventos específicos
perf stat -e cycles,instructions,cache-misses,cache-references ./mi_app

Con perf puedes detectar problemas como:

  • Alta tasa de fallos de caché (cache misses altos).
  • Baja relación instrucciones/ciclo (IPC bajo indica ineficiencia).
  • Branch mispredictions que degradan el rendimiento del pipeline.

Instalación:

sudo apt install linux-tools-common linux-tools-$(uname -r)

turbostat — Frecuencias y estados de reposo

turbostat (parte de linux-tools) muestra la frecuencia real de cada núcleo, los estados C (idle states) y el consumo energético estimado:

sudo turbostat --quiet sleep 10

Es especialmente útil para detectar si el escalado de frecuencia (cpufreq) no está funcionando correctamente, o si algunos núcleos están entrando en estados de reposo profundos cuando no deberían.

Temperatura de la CPU

El sobrecalentamiento puede causar throttling (reducción forzada de frecuencia) y rendimiento inconsistente. Para monitorear temperaturas:

# Instalar sensores
sudo apt install lm-sensors
sudo sensors-detect --auto
sensors

Salida típica:

coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +45.0°C  (high = +80.0°C, crit = +100.0°C)
Core 0:        +42.0°C  (high = +80.0°C, crit = +100.0°C)
Core 1:        +44.0°C  (high = +80.0°C, crit = +100.0°C)
Core 2:        +41.0°C  (high = +80.0°C, crit = +100.0°C)
Core 3:        +43.0°C  (high = +80.0°C, crit = +100.0°C)

Si ves temperaturas cercanas a «high» o «crit» en reposo, tienes un problema térmico. En servidores, lo ideal es mantener la CPU por debajo de 70-75°C bajo carga.

Resumen rápido de herramientas

Comando Qué muestra Cuándo usarlo
/proc/cpuinfo Información detallada de cada núcleo Consulta inicial de hardware
lscpu Resumen de arquitectura y cachés Vista rápida de la CPU
top / htop Uso de CPU en tiempo real por proceso Monitoreo diario
mpstat -P ALL Uso de CPU por núcleo Detectar desbalance o hilos únicos
vmstat Cola de ejecución, CPU, IOWait Diagnóstico rápido de cuellos de botella
uptime Load average (1, 5, 15 min) Vista general de carga del sistema
perf Análisis profundo con contadores HW Profiling y optimización avanzada
turbostat Frecuencia y estados C por núcleo Diagnóstico de escalado y energía
sensors Temperatura de la CPU Detección de sobrecalentamiento

Conclusión

Conocer el estado de tu CPU es fundamental para mantener servidores saludables y aplicaciones rápidas. Desde los archivos en /proc hasta herramientas avanzadas como perf y turbostat, Linux te da visibilidad total de lo que está pasando a nivel de hardware.

En el próximo artículo de esta serie veremos cómo monitorizar la memoria RAM y el swap. ¡No te lo pierdas!

¿Usas alguna otra herramienta para monitorear CPU? Cuéntanos en los comentarios. 👇