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. 👇