Quiero solucionar problemas de uso elevado de la CPU o tiempo de robo elevado en mi instancia de Linux de Amazon Elastic Compute Cloud (Amazon EC2).
Descripción corta
El uso elevado de la CPU puede deberse a la actividad a nivel de la aplicación, a las instancias de EC2 subaprovisionadas o a la falta de coincidencia en la supervisión. Para solucionar problemas relacionados con el uso elevado de la CPU, comprueba las métricas de tiempo de robo del entorno. El tiempo de robo de CPU es el tiempo en que una instancia está lista, pero no puede continuar porque sus recursos físicos subyacentes están asignados a otro lugar. El tiempo de robo elevado afecta al rendimiento de las aplicaciones y provoca ralentizaciones, tiempos de espera y un comportamiento incoherente.
El tiempo de robo elevado se produce por las siguientes razones:
- Una instancia vecina en el mismo host físico subyacente tiene altas demandas de CPU.
- El hipervisor de instancias está sobrecargado de solicitudes.
- El saldo de créditos de la CPU de una instancia en ráfagas está agotado.
Nota: Es posible que observes diferencias entre las métricas de Amazon CloudWatch y las métricas de las herramientas a nivel de instancia. Esto ocurre porque CloudWatch recopila métricas a nivel de hipervisor, pero las herramientas de instancia miden desde el sistema operativo (SO) invitado. CloudWatch también toma muestras en intervalos de 1 a 5 minutos en los que las herramientas de instancia pueden proporcionar datos segundo a segundo. Los métodos de cálculo de la sincronización horaria y del uso de la CPU también pueden provocar discrepancias.
Resolución
Para solucionar problemas de uso elevado de la CPU en tu instancia de Linux, realiza las siguientes acciones de solución de problemas.
Medición del tiempo de robo de CPU de la configuración
Para ver el tiempo de robo de la configuración, ejecuta el siguiente comando:
top
Resultado de ejemplo:
top - 14:23:45 up 7 days, 2:03, 1 user, load average: 0.45, 0.50, 0.45
Tasks: 105 total, 1 running, 104 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.3 us, 2.1 sy, 0.0 ni, 85.6 id, 1.2 wa, 0.0 hi, 0.3 si, 5.5 st
MiB Mem : 3949.2 total, 146.7 free, 1367.8 used, 2434.7 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 2312.8 avail Mem
En la salida, comprueba el valor st para obtener el porcentaje de tiempo de robo de la CPU. En el ejemplo anterior, el tiempo de robo representa el 5,5 % de todo el tiempo de CPU. Se recomienda mantener el tiempo de robo por debajo del 5 %. Si el tiempo de robo supera constantemente el 10 %, comprueba si hay problemas de configuración incorrecta en la instancia.
Para las cargas de trabajo que requieren recursos dedicados, se recomienda utilizar un host dedicado de Amazon EC2.
Uso de CloudWatch para supervisar la CPU
Utiliza CloudWatch para supervisar el rendimiento de las instancias. Comprueba la métrica CPUUtilization de tu instancia y las métricas CPUCreditUsage y CPUCreditBalance de las instancias t2 y t3.
Si hay alguna discrepancia entre las métricas de CloudWatch y lo que ves en la instancia, comprueba que has configurado correctamente el agente de CloudWatch. Comprueba si hay errores en /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log.
Nota: CloudWatch no proporciona métricas de tiempo de robo de forma predeterminada. En su lugar, debes configurar el agente de CloudWatch para agregar métricas personalizadas.
Uso de herramientas a nivel de instancia para supervisar la instancia
Para obtener una interfaz más fácil de usar para ver el tiempo de robo de la configuración, usa htop en lugar del comando top. Para descargar htop, consulta htop-dev/htop en el sitio web de GitHub.
Para ver el uso detallado de los recursos a nivel del sistema, como la memoria, la paginación, la E/S y la CPU a lo largo del tiempo, ejecuta el siguiente comando:
vmstat
Resultado de ejemplo:
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 150272 97545 2394124 0 0 0 5 1 2 5 2 86 1 6
0 0 0 150272 97545 2394124 0 0 0 0 435 625 4 2 88 0 6
Nota: Para ver el tiempo de robo, consulta la columna st.
Para ver los datos históricos de los recursos, ejecuta el siguiente comando:
sar
Resultado de ejemplo:
$ sar -P ALL 1 3
Linux 5.4.0-1045-aws (ip-10-0-1-100) 04/22/2025 _x86_64_ (2 CPU)
4:25:00 CPU %user %nice %system %iowait %steal %idle
14:25:01 all 4.50 0.00 2.00 1.00 5.50 87.00
14:25:01 0 4.00 0.00 2.00 1.00 6.00 87.00
14:25:01 1 5.00 0.00 2.00 1.00 5.00 87.00
Nota: Puedes configurar sar para recopilar métricas de la CPU a intervalos regulares. Para obtener más información, consulta The sar command (Comando sar) en el sitio web de Red Hat.
Comprobación del saldo de tipos de instancias en ráfagas
Los diferentes tipos de instancias son más susceptibles a problemas de tiempo de robo. Por ejemplo, un uso elevado y sostenido de la CPU puede agotar los créditos de la CPU y reducir el rendimiento en tipos de instancias ampliables, como t2 y t3.
Si el saldo de créditos de tu tipo de instancia ampliable es constantemente bajo o igual a 0, cambia el tipo de instancia a un tamaño mayor. O bien, cambia el tipo de instancia por una instancia no ampliable, como una serie m, c o r.
Optimización de la configuración de la instancia o aplicación
Si un proceso específico usa mucha CPU, realiza las siguientes acciones:
- Investiga si el uso elevado de la CPU es el comportamiento esperado.
- Revisa los registros de la aplicación para ver si hay errores o comportamientos inesperados.
- Reinicia la aplicación o el servicio.
Si el uso de la CPU es el comportamiento esperado, pero sigue siendo demasiado alto, ajusta la aplicación para mejorar la eficiencia. Por ejemplo, se recomienda mover las cargas de trabajo que requieren muchos recursos de computación a una instancia o contenedor diferente.
Administración de los patrones de tráfico y carga
Si el uso elevado de la CPU es un problema recurrente debido a los patrones de tráfico o carga, toma las siguientes medidas:
Información relacionada
¿Cómo soluciono los problemas de una instancia de EC2 de Linux que no supera una comprobación de estado debido al uso excesivo de los recursos?