Tutoriales de VPS
¿CPU del VPS al 100%? Guía de diagnóstico y optimización del rendimiento
¿Qué hacer cuando el uso de CPU del VPS llega al 100%? Este artículo explica los métodos de diagnóstico con top/htop, técnicas para encontrar procesos con alto consumo de CPU, el análisis de causas comunes (scripts descontrolados, sobrecarga de la base de datos, intrusiones de minería) y soluciones de gestión de procesos y monitoreo a largo plazo.

¿Tu VPS de repente se vuelve muy lento, las conexiones SSH se traban y los tiempos de respuesta del sitio web se disparan? Revisa el uso de CPU: probablemente ya llegó al 100%. Esta situación es más común de lo que parece, pero mientras domines los métodos de diagnóstico correctos, normalmente podrás localizar y resolver el problema rápidamente.
Primero, inicia sesión en el VPS y ejecuta el comando más básico para ver el estado actual:
top
El comando top muestra el uso de recursos del sistema en tiempo real. Presta atención a estos valores:
- %Cpu(s) - Uso total de CPU
- us - Uso por procesos de usuario
- sy - Uso por el kernel del sistema
- id - Porcentaje inactivo (un valor muy bajo aquí significa que la CPU está muy ocupada)
Pulsa la tecla P para ordenar por uso de CPU y encontrar rápidamente qué proceso está consumiendo recursos. Pulsa q para salir.
Si quieres una interfaz más amigable, puedes instalar htop:
# Debian/Ubuntu
apt install htop -y
# CentOS/RHEL
yum install htop -y
# 运行
htop
htop admite operación con el ratón y visualización en color, lo que resulta más intuitivo.
ps aux --sort=-%cpu | head -20
Esto lista los 20 procesos con mayor uso de CPU. El significado de cada columna en la salida:
- USER - El usuario que ejecuta el proceso
- PID - ID del proceso
- %CPU - Porcentaje de uso de CPU
- %MEM - Porcentaje de uso de memoria
- COMMAND - El comando del proceso
watch -n 1 'ps aux --sort=-%cpu | head -10'
Se actualiza una vez por segundo para observar la tendencia del uso de CPU.
Después de encontrar el PID de un proceso sospechoso, revisa sus detalles:
# 查看进程的完整命令行
cat /proc/<PID>/cmdline | tr '\0' ' '
# 查看进程的工作目录
ls -l /proc/<PID>/cwd
# 查看进程打开的文件
lsof -p <PID>
Los bucles infinitos o las consultas ineficientes en el código del sitio web son la causa más común.
Características: procesos php-fpm o python con CPU al 100% de forma continua
Diagnóstico:
# 查看 PHP-FPM 进程状态
ps aux | grep php-fpm
# 查看正在执行的 PHP 脚本
lsof -c php-fpm | grep '\.php'
Solución:
- Revisa el código modificado recientemente
- Consulta el registro de errores de PHP
/var/log/php-fpm/error.log - Reinicia temporalmente PHP-FPM:
systemctl restart php-fpm
Las consultas lentas de MySQL pueden tumbar todo el servidor.
Características: el proceso mysqld usa mucha CPU
Diagnóstico:
# 登录 MySQL 查看当前查询
mysql -e "SHOW PROCESSLIST;"
# 查看慢查询日志(需要先开启)
tail -f /var/log/mysql/slow.log
Solución:
- Optimiza las consultas lentas y añade índices
- Mata las consultas bloqueadas:
mysql -e "KILL <process_id>;" - Considera actualizar la configuración del VPS o usar un servidor de base de datos dedicado
Este es un problema grave que requiere atención inmediata.
Características:
- Nombres de procesos desconocidos, como
kdevtmpfsi,kinsingo cadenas aleatorias - Procesos ocultos o que no se pueden matar normalmente
- La CPU se mantiene al 100% pero no encuentras la causa
Diagnóstico:
# 检查定时任务
crontab -l
cat /etc/crontab
ls -la /etc/cron.d/
# 检查可疑的启动项
systemctl list-unit-files --type=service | grep enabled
# 检查异常的网络连接
netstat -antp | grep ESTABLISHED
Solución:
- Mata de inmediato los procesos sospechosos
- Limpia las entradas maliciosas de las tareas programadas
- Cambia todas las contraseñas y revisa las claves SSH
- Actualiza el sistema y todo el software
- En casos graves, se recomienda reinstalar el sistema
Se configuraron demasiados workers de Nginx o Apache, o el pool de procesos de PHP-FPM es demasiado grande.
Diagnóstico:
# 查看 Nginx worker 数量
ps aux | grep nginx | wc -l
# 查看 PHP-FPM 进程数量
ps aux | grep php-fpm | wc -l
Solución: ajusta los parámetros según la configuración del VPS. Para un VPS de 1 núcleo, se recomienda:
- Nginx workers: 1-2
- PHP-FPM pm.max_children: 5-10
Las tareas del sistema en segundo plano pueden saturar la CPU temporalmente.
Características: uso alto de CPU en procesos como apt, yum, rsync, gzip
Solución: normalmente basta con esperar a que termine la tarea. Si no es urgente, puedes bajar la prioridad:
# 降低进程优先级(19 是最低)
renice 19 -p <PID>
# 正常终止
kill <PID>
# 强制终止(进程无响应时使用)
kill -9 <PID>
# 按进程名批量杀
pkill -f <进程名关键词>
Usa la herramienta cpulimit para limitar el uso de CPU de un proceso específico:
# 安装
apt install cpulimit -y
# 限制某进程最多使用 50% CPU
cpulimit -p <PID> -l 50
# 启动时设置低优先级
nice -n 19 <命令>
# 修改运行中进程的优先级
renice 10 -p <PID>
# 安装 nmon
apt install nmon -y
nmon
# 或者安装 glances(功能更全)
pip3 install glances
glances
Escribe un script de monitoreo sencillo que envíe una notificación cuando la CPU supere un umbral:
#!/bin/bash
CPU_THRESHOLD=90
CPU_USAGE=$(top -bn1 | grep 'Cpu(s)' | awk '{print int($2)}')
if [ $CPU_USAGE -gt $CPU_THRESHOLD ]; then
echo "CPU 使用率 ${CPU_USAGE}% 超过阈值" | mail -s "VPS CPU 告警" [email protected]
fi
Añádelo a crontab para comprobar cada 5 minutos:
*/5 * * * * /path/to/cpu_monitor.sh
Si la CPU llega al 100% con frecuencia, además de optimizar el código y la configuración, quizá debas considerar:
- Actualizar la configuración del VPS - Aumentar el número de núcleos de CPU
- Usar una CPU de mayor frecuencia - Algunos proveedores ofrecen instancias de alto rendimiento
- Separar servicios - Trasladar la base de datos, la caché, etc. a servidores dedicados
- Añadir una capa de caché - Redis y Memcached reducen la carga de cálculo
- Usar una CDN - Aligerar la carga de recursos estáticos del servidor
Flujo de diagnóstico para la CPU al 100%:
- Usa
topohtoppara confirmar el estado de la CPU - Usa
ps aux --sort=-%cpupara encontrar los procesos con alto consumo - Analiza el tipo de proceso para determinar si es una tarea normal o una anomalía
- Actúa según el caso: optimiza el código, ajusta la configuración, mata los procesos maliciosos
- Establece un monitoreo a largo plazo para evitar que el problema vuelva a ocurrir
En la mayoría de los casos, siguiendo este flujo podrás localizar el problema rápidamente. Si de verdad no encuentras la causa, puedes detener los servicios uno por uno para aislarla, o simplemente reiniciar el VPS para recuperarte temporalmente y luego investigar con calma.