¿Por qué veo un uso elevado o creciente de la CPU en mi clúster de ElastiCache para Redis?

Última actualización: 26/07/2022

Veo un uso elevado o creciente de la CPU en mi clúster de Amazon ElastiCache para Redis. ¿Cómo puedo solucionar este problema?

Descripción corta

Hay dos métricas de CPU de Amazon CloudWatch de ElastiCache para Redis:

  • EngineCPUUtilization: esta métrica informa de la utilización de la CPU del subproceso del motor de Redis. Como Redis consta de un solo subproceso, la práctica recomendada es monitorear la métrica EngineCPUUtilization para los nodos con cuatro o más vCPU.
  • CPUUtilization: esta métrica muestra el porcentaje de uso de la CPU para todo el host. Para nodos más pequeños con dos vCPU o menos, utilice la métrica CPUUtilization a fin de monitorear la carga de trabajo del clúster.

Resolución

EngineCPUUtlilization alta

Las siguientes son razones comunes para que EngineCPUUtilization sea alta:

  • Un comando de larga duración que consume mucho tiempo de CPU: los comandos con alta complejidad de tiempo, comokeys, hkeys, hgetall, etc., consumen más tiempo de CPU. Para obtener sugerencias de rendimiento y complejidad de tiempo para cada comando, consulte Comandos en el sitio web redis.io. Los scripts Lua (que se ejecutan mediante los comandosEVAL o EVALSHA de Redis) son una operación atómica en Redis. Todas las actividades del servidor se bloquean durante todo el tiempo de ejecución de un script Lua, lo que provoca un uso elevado de EngineCPUUtilization. Compruebe si hay comandos de larga duración o un script Lua de larga duración mediante el registro lento de Redis.
  • Un número elevado de solicitudes: compruebe las estadísticas de los comandos para determinar si hay ráfagas de comandos o si la latencia está en aumento. Puede comprobar las estadísticas de los comandos mediante métricas de CloudWatch, como GetTypeCmds o HashBasedCmds. O bien, mediante el comando de Redis info commandstats. Si ve un número elevado de solicitudes debido a la carga de trabajo esperada en la aplicación, considere escalar el clúster.
  • Copia de seguridad y reproducción: compruebe la métrica SaveInProgress para ver si se produce la copia de seguridad o la reproducción. Esta métrica binaria devuelve “1” cuando hay un proceso de guardado en segundo plano (con o sin bifurcación) en curso. La métrica devuelve “0” si no hay ningún proceso de guardado en segundo plano en curso. Asegúrese de tener suficiente memoria para crear una instantánea de Redis.
  • Gran cantidad de NewConnections: establecer una conexión TCP es una operación costosa desde el punto de vista computacional, en especial para los clústeres habilitados para TLS. Un número elevado de solicitudes de conexión de clientes nuevos en un corto periodo podría provocar un aumento en la EngineCPUUtilization. DesdeRedis 6.2 se han implementado mejoras de rendimiento en los clústeres habilitados para TLS que utilizan tipos de nodos x86 con ocho vCPU o más en tipos de nodos Graviton2 con cuatro vCPU o más. Para obtener recomendaciones sobre cómo gestionar un gran número de conexiones, consulte Prácticas recomendadas: clientes de Redis y Amazon ElastiCache para Redis.
  • Número elevado de expulsiones: Redis expulsa las claves según el parámetro maxmemory-policy. La expulsión ocurre cuando la memoria caché no tiene suficiente memoria para almacenar datos nuevos. Si el volumen de expulsión es alto, EngineCPUUtilization aumenta porque Redis está ocupado con la expulsión de las claves. El volumen de expulsiones se puede monitorear mediante las métricas de CloudWatch Expulsiones. Si la expulsión es alta, amplíe el clúster mediante un tipo de nodo más grande o escale horizontalmente al agregar más nodos.
  • Número alto de recuperación: para liberar memoria, Redis hace un muestreo y, a continuación, elimina cualquier clave que haya llegado al vencimiento del tiempo de espera. Este proceso se denomina “reclamar”. Si hay un número elevado de vencimientos, EngineCPUUtilization aumenta porque Redis está ocupado con el reclamo de las claves. Puede monitorear el número de eventos de vencimiento de claves mediante las métricas de CloudWatch Reclamadas. La práctica recomendada es no hacer caducar demasiadas claves al mismo tiempo, por ejemplo, al ejecutar el comando EXPIREAT de Redis.

Para obtener más información sobre la solución de problemas de EngineCPUUtilization, consulte Solución de problemas de conexiones: uso de la CPU.

CPUUtilization alta

Las siguientes son razones comunes para una CPUUtilization:


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?