如何解决自行设计的 Amazon ElastiCache for Redis 集群中 CPU 使用率增加的问题?

2 分钟阅读
1

我想解决我自行设计的 Amazon ElastiCache for Redis 集群中 CPU 使用率增加的问题。

简短描述

以下是适用于 ElastiCache for Redis 的 Amazon CloudWatch CPU 指标:

  • EngineCPUUtilization: 报告 Redis 引擎线程的 CPU 使用率。Redis 是单线程的。最佳实践是监控具有四个或更多 vCPU 的节点的 EngineCPUUtilization 指标。
  • CPUUtilization: 表示主机的 CPU 利用率百分比。对于具有两个或更少 vCPU 的较小节点,使用 CPUUtilization 指标来监控集群工作负载。

解决方法

故障排除高 EngineCPUUtilization 问题

故障排除高 EngineCPUUtilization 问题,请检查以下内容:

  • 消耗大量 CPU 时间的长时间运行命令: 诸如 keyshkeyshgetall 之类的时间复杂度高的命令会消耗大量的 CPU 时间。要查看命令的时间复杂度和性能建议,请参阅 Redis 网站上的 Commands。如果您使用 Lua 脚本,其在运行时会停止所有服务器活动,所有的 EngineCPUUtilization 都会增加。Redis 命令 EVALEVALSHA 使用 Lua 脚本。有关更多信息,请参阅 Redis 网站上 Scripting with LuaEVALEVALSHA。要检查是否存在长时间运行的命令或 Lua 脚本,请使用 Redis SLOWLOG
  • 大量请求: 检查命令统计信息以识别命令暴增或延迟增加。要查看命令统计信息,请使用 GetTypeCmdsHashBasedCmdsCloudWatch 指标。或者,使用 Redis INFO 命令。有关更多信息,请参阅 Redis 网站上的 INFO。如果您的请求数量很多,并且您的应用程序工作负载符合预期,则可以扩展集群
  • 备份和复制: 如果进行了备份或复制,请检查 SaveInProgress 指标。当后台保存(分叉或无分叉)正在进行时,此二进制指标显示 1;当未进行后台保存时,此二进制指标显示 0。确保有足够的内存来创建 Redis 快照
  • 大量 NewConnections: 在短时间内出现大量新的客户端连接请求可能会导致 EngineCPUUtilization 增加。有关处理大量连接时的最佳实践,请参阅 Best practices: Redis clients and Amazon ElastiCache for Redis。对于 Redis 6.2 及更高版本,实现了性能改进。有关更多信息,请参阅 ElastiCache (Redis OSS) 版本 6.2(增强版)
  • 大量的密钥驱逐事件: Redis 根据 maxmemory-policy 参数设置驱逐密钥。当缓存没有足够的内存来容纳新数据时,就会发生驱逐操作。如果驱逐量很高,则 Redis 会使用更多的 CPU 资源来驱逐密钥,并且 EngineCPUUtilization 会增加。要监控驱逐量,请使用 CloudWatch 指标 Evictions。如果驱逐量很高,则使用更大的节点类型或添加更多节点来扩展集群
  • 大量回收: 为了释放内存,Redis 会采样并删除任何已到期的密钥。此过程称为回收。如果到期密钥过多,CPUUtilizationEngineCPUUtilization 可能会增加。要监控密钥到期事件的数量,请使用 CloudWatch 指标 **Reclaimed。**最佳实践是确保不会有很多密钥同时过期。要确保您的不同密钥在不同的时间段过期,请使用 EXPIREAT 命令或为密钥设置不同的 TTL 值。有关更多信息,请参阅 Redis 网站上的 EXPIREAT

故障排除高 CPUUtilization 问题

要故障排除高 CPUUtilization 问题,请检查以下内容:

  • 高网络流量或大量连接: 高网络流量或大量连接可能会导致 Amazon ElastiCache Redis 上的 CPUUtilization 增加。要检查是否存在高网络流量或大量连接,请查看 NewConnectionsNetworkBytesInNetworkBytesOutNetworkPacketsInNetworkPacketsOut CloudWatch 指标
  • 由其他线程处理的异步 I/O: 对于支持的节点类型,增强型 I/O 旨在处理专用线程上的网络 I/O。此外,对于 Redis 版本 6.2 及更高版本,支持 TLS 卸载,允许 ElastiCache for Redis 在 I/O 线程上执行 TLS 操作。TLS 操作使用节点中可用的额外 CPU 核心,这种额外的 CPU 使用量可能会导致 **CPUUtilization 增加。**有关更多信息,请参阅 Amazon ElastiCache performance boost with Amazon EC2 M5 and R5 instances
  • 持续的托管维护和服务更新: 维护和服务更新需要计算能力,并可能导致 CPUUtilization 增加。确保检查维护窗口,看看 CPUUtilization 增加是否与维护同时发生。最佳实践是将维护窗口设置为使用率较低的时段。有关更多信息,请参阅 Amazon ElastiCache 托管维护和服务更新帮助页面
  • 高分页和操作: 节点上的内存不足可能会导致内核将内存分页到交换区。此操作可能导致性能下降。如果分页操作过多,则 CPUUtilization 可能会增加。此外,如果在进行备份或扩展等操作时节点上的负载很高,则 CPUUtilization 可能会增加。有关更多信息,请参阅 Monitoring best practices with Amazon ElastiCache for Redis using Amazon CloudWatch
AWS 官方
AWS 官方已更新 1 年前