CPU 使用率过高

最后更新时间:2021-11-30 16:21:27

    现象描述

    • 现象1:收到 CPU 使用率过高的消息提醒。
    • 现象2:CPU 使用率的监控指标高。
    • 现象3:整体吞吐量变小、响应速度变慢。

    可能原因

    • 存在高时间复杂度的命令。
    • 负载过高,如存在对热点 Key 的大量访问。
    • 存在频繁建立连接的现象。
    • 存在异常访问。

    解决思路

    1. 业务优化

      1. 在控制台系统监控页面,确认 QPS(Queries Per Second)是否过高和突发热点 Key 等。
      2. 在排查异常访问后,对业务逻辑进行优化,例如,优化高复杂度的命令、优化热点 Key、优化短连接。如果仍不能解决问题,您可以考虑升级实例。
    2. 实例升级

      • 如果是读负载过大,您可以通过增加副本数分摊读负载,开启读写分离可能会导致数据读取不一致(副本节点数据延后于主节点),请先确认业务是否允许数据不一致的问题。
      • 如果是写负载过大,您可以通过升级为集群版提升 CPU 处理能力,升级集群前需要检测兼容性,请参见 标准架构迁移集群架构检查

    处理步骤

    业务优化

    1. 登录 Redis 控制台,在实例列表,单击实例 ID,进入实例管理页面。
    2. 在实例管理页面,选择【系统监控】页,确认 QPS 是否过高或者有突发的热 Key。
    3. 在排查异常访问后,您可以对业务逻辑进行优化:
      • 对于热 Key,您可以拆分复杂数据结构,将热点 Key 拆分为若干个新的 Key 分布到不同 Redis 节点上,从而减轻压力。以哈希类型为例,该热 Key 的类型是一个二级数据结构,该哈希元素个数可能较多,可以考虑将当前 hash 进行拆分。
      • 对于大 Key,如果是 value 过大,您可以将对象拆分成多个 key-value,将操作压力平摊到多个 Redis 实例;如果是 Key 过多,您可以参考 hash 结构存储,将多个 Key 存储在一个 hash 结构中。

    实例升级

    读负载过大场景

    读负载过大时,您可以 开启读写分离,通过 增加副本数 来分摊读负载。

    注意:

    开启读写分离可能会导致数据读取不一致(副本节点数据延后于主节点),请先确认业务是否允许数据不一致的问题,请参见 变更实例规格

    1. 登录 Redis 控制台,在实例列表,选择“操作”列的【配置变更】>【增加副本】。
    2. 在弹出的配置变更对话框,选择需更改的配置,单击【确定】。
    3. 返回实例列表,待实例状态变更为“运行中”,即可正常使用。

    写负载过大场景

    • 集群架构
      登录 Redis 控制台,在实例列表,选择“操作”列的【配置变更】>【增加分片】。

      说明:

      • 配置变更后,实例将按照新的规格计费。
      • 新增分片操作,系统将自动均衡 Slot 配置,并且迁移数据,迁移操作可能会失败,建议在业务低峰期进行操作, 避免迁移操作对业务访问造成影响。
      • 每分片能提供的 QPS 为8W - 10W,请按需增加。
    • 标准架构
      通过升级为集群版提升 CPU 处理能力,升级集群前需要检测兼容性,请参见 标准架构迁移集群架构检查

      1. 登录 Redis 控制台,在实例列表,单击实例 ID,进入实例详情页面。
      2. 在实例详情页的“规格信息处”,单击【架构升级】。
      3. 升级集群架构后,返回实例列表,选择“操作”列的【配置变更】>【增加分片】。