Tair实例的CPU使用率升高会影响整体的吞吐量和应用的响应速度,极端情况下甚至会导致应用不可用。当平均CPU使用率高于50%、连续5分钟内的CPU平均峰值使用率高于90%时,您需要及时关注并排查该问题,以保障应用的稳定运行。
查找并禁用高消耗命令
高消耗命令:即时间复杂度为O(N)或更高的命令。通常情况下,命令的时间复杂度越高,在执行时会消耗较多的资源,从而导致CPU使用率上升。关于各命令对应的时间复杂度信息,请参见Redis官网。
由于单线程的特性,Tair在执行高消耗命令时会引发排队导致应用响应变慢。极端情况下,甚至可能导致实例被整体阻塞,引发应用超时中断或流量跳过缓存层直接到达后端的数据库侧,引发雪崩效应。
优化热点Key
现象:
Tair实例为集群架构或读写分离架构,实例中部分数据节点的CPU使用率高。
解决方法:
- 启用代理查询缓存功能(Proxy Query Cache),代理节点会缓存热点Key对应的请求和查询结果,当在有效时间内收到同样的请求时直接返回结果至客户端,无需和后端的数据分片交互,可改善对热点Key的发起大量读请求导致的访问倾斜。更多信息,请参见通过Proxy Query Cache优化热点Key问题。
- 在分析相应节点的慢日志和审计日志的基础上,再分析各节点的热点Key,从而消除或缓解热点Key。具体操作,请参见实时Top Key统计。
优化短连接
现象:
频繁地建立连接,导致Tair实例的大量资源消耗在连接处理上。具体表现为CPU使用率较高,连接数较高,但QPS(每秒访问次数)未达到预期的情况。
解决方法:
关闭AOF
现象:
Tair实例默认开启了AOF(append-only file),当实例处于高负载状态时,频繁地执行AOF会一定程度上导致CPU使用率升高。
解决方法:
在业务允许的前提下,您可以考虑关闭持久化。另外将Tair数据备份时间设定到低访问/维护时间窗口内,降低影响。
优化Proxy节点连接与管道的使用
现象:
Tair实例为集群架构或读写分离架构,通过控制台的性能趋势查看Proxy节点的CPU使用率不均衡,差额过大。
解决方法:
- 通过性能趋势功能,确认连接使用率是否均衡。具体操作,请参见性能趋势。
- 根据连接使用率是否均衡,选择下述操作:
- 均衡:重启业务所属的客户端或Proxy节点使连接重分配。
- 不均衡:通常因pipeline或batch的操作规模过大引起,需要减少对应的操作规模,例如将其拆分为多个操作来执行。
评估服务能力
经过上述方法优化后,在业务正常运行的情况下,还是经常遇到实例整体的负载较高(平均CPU使用率在50%以上),可能存在性能瓶颈。
首先,应排查是否存在异常的业务访问,例如异常的命令、来自某台应用主机的异常访问等,此类情况需要从业务上进行优化。如果均为正常访问,此时的高负载是正常业务行为,为保障业务平稳运行,建议升级实例的规格,将其升级为集群架构或读写分离架构。关于如何升级实例,请参见变更实例配置。