Quiero solucionar los problemas de aumento del uso de la CPU en mi clúster de diseño propio de Amazon ElastiCache para Redis.
Breve descripción
A continuación se indican las métricas de CPU de Amazon CloudWatch para ElastiCache para Redis:
- EngineCPUUtilization: informa sobre el uso de la CPU del subproceso del motor de Redis. Redis consta de un solo subproceso. Se recomienda supervisar la métrica EngineCPUUtilization de los nodos con cuatro o más vCPU.
- CPUUtilization: indica el porcentaje de utilización de la CPU del host. Para los nodos más pequeños con dos o menos vCPU, utilice la métrica CPUUtilization para supervisar la carga de trabajo del clúster.
Resolución
Solución de problemas de EngineCPUUtilization elevada
Para solucionar problemas de EngineCPUUtilization elevada, compruebe lo siguiente:
- Comandos de ejecución prolongada que consumen mucho tiempo de CPU: los comandos con una alta complejidad temporal, como keys, hkeys y hgetall consumen mucho tiempo de CPU. Para comprobar las sugerencias de rendimiento y complejidad temporal de un comando, consulte Commands en el sitio web de Redis. Si utiliza scripts Lua, todas las actividades del servidor se bloquean durante el tiempo de ejecución y aumenta EngineCPUUtilization. Los comandos de Redis EVAL y EVALSHA utilizan scripts Lua. Para obtener más información, consulte Scripting with Lua, EVAL y EVALSHA en el sitio web de Redis. Para comprobar si hay comandos de ejecución prolongada o scripts Lua, utilice Redis SLOWLOG.
- Una gran cantidad de solicitudes: compruebe las estadísticas de los comandos para identificar si hay ráfagas de comandos o un aumento de la latencia. Para comprobar las estadísticas de los comandos, utilice métricas de CloudWatch, como GetTypeCmds o HashBasedCmds. O bien, utilice el comando INFO de Redis. Para obtener más información, consulte INFO en el sitio web de Redis. Si tiene una gran cantidad de solicitudes y la carga de trabajo de su aplicación es la esperada, escale el clúster.
- Copia de seguridad y replicación: si se ha realizado una copia de seguridad o una replicación, compruebe la métrica SaveInProgress. Esta métrica binaria muestra 1 si hay un proceso de guardado en segundo plano (con o sin bifurcación) y muestra 0 si no hay ningún proceso de guardado en segundo plano en curso. Asegúrese de que haya suficiente memoria para crear una instantánea de Redis.
- Valor elevado de NewConnections: una gran cantidad de solicitudes de conexión de clientes nuevos en un período de tiempo corto puede causar un aumento de EngineCPUUtilization. Para conocer las prácticas recomendadas sobre cómo administrar una gran cantidad de conexiones, consulte Best practices: Redis clients and Amazon ElastiCache for Redis. Se han implementado mejoras de rendimiento para Redis 6.2 y versiones posteriores. Para obtener más información, consulte ElastiCache for Redis 6.2 (enhanced).
- Gran cantidad de expulsiones de claves: Redis expulsa las claves en función del parámetro maxmemory-policy. Las expulsiones se producen cuando la memoria caché no tiene suficiente memoria para almacenar datos nuevos. Si el volumen de expulsión es elevado, Redis utiliza más recursos de CPU para expulsar las claves, lo que causa el aumento de EngineCPUUtilization. Para supervisar el volumen de expulsiones, utilice la métrica Expulsiones de CloudWatch. Si el volumen de expulsiones es elevado, utilice un tipo de nodo más grande o añada más nodos para escalar el clúster.
- Gran cantidad de reclamaciones: para liberar memoria, Redis realiza un muestreo y elimina cualquier clave que haya llegado al vencimiento del tiempo de espera. Este proceso se denomina reclamación. Si hay una gran cantidad de vencimientos, es posible que las métricas CPUUtilization y EngineCPUUtilization aumenten. Para supervisar la cantidad de eventos de vencimiento de claves, utilice la métrica de CloudWatch Reclaimed. Se recomienda asegurarse de que no venzan demasiadas claves al mismo tiempo. Para asegurarse de que sus claves vencen en diferentes periodos de tiempo, utilice el comando EXPIREAT o establezca diferentes valores de TTL para sus claves. Para obtener más información, consulte EXPIREAT en el sitio web de Redis.
Solución de problemas de CPUUtilization elevada
Para solucionar problemas de CPUUtilization elevada, compruebe lo siguiente:
- Exceso de tráfico de red o conexiones: El exceso de tráfico de red o conexiones puede causar un aumento de CPUUtilization en Amazon ElastiCache para Redis. Para comprobar si hay exceso de tráfico de red o conexiones, compruebe las métricas de CloudWatch NewConnections, NetworkBytesIn, NetworkBytesOut, NetworkPacketsIn y NetworkPacketsOut.
- E/S asíncrona administrada por otros subprocesos: para los tipos de nodos compatibles, la E/S mejorada está diseñada para administrar la E/S de red en subprocesos dedicados. Además, en la versión 6.2 y posteriores de Redis, se admite la descarga de TLS y permite a ElastiCache para Redis realizar operaciones de TLS en los subprocesos de E/S. Las operaciones de TLS utilizan el núcleo de CPU adicional disponible en los nodos, y este uso adicional de la CPU puede causar un aumento de CPUUtilization. Para obtener más información, consulte Amazon ElastiCache performance boost with Amazon EC2 M5 and R5 instances.
- Actualizaciones de servicio y mantenimiento administrado continuas: las actualizaciones de servicio y mantenimiento requieren capacidad de procesamiento y pueden causar un aumento de CPUUtilization. Asegúrese de comprobar el periodo de mantenimiento para ver si el aumento de CPUUtilization se produce al mismo tiempo. Se recomienda configurar el período de mantenimiento en el momento de menor uso. Para obtener más información, consulte Página de ayuda de actualizaciones de servicio y mantenimiento administrado de Amazon ElastiCache.
- Exceso de paginación y operaciones: una memoria insuficiente en el nodo puede causar que el kernel agote la memoria para intercambiar. Esta acción puede causar una degradación del rendimiento. Si la paginación es excesiva, es posible que CPUUtilization aumente. Además, si la carga del nodo es elevada cuando se realizan operaciones como la copia de seguridad o el escalado, es posible que CPUUtilization aumente. Para obtener más información, consulte Monitoring best practices with Amazon ElastiCache for Redis using Amazon CloudWatch.