如果云数据库 Tair(兼容 Redis)实例的内存使用率突然飙升,可参考本文排查原因并解决问题。
问题现象
云数据库 Tair(兼容 Redis)实例之前的内存使用率较低。但从某个时间点开始,内存使用率突然迅速升高,甚至达到100%。
问题原因
可能内存使用率突然升高的主要原因如下:
短时间内大量写入新数据。
短时间内大量创建新连接。
突发访问产生大量流量超过网络带宽,导致输入缓冲区和输出缓冲区积压。
客户端处理速度跟不上实例的处理速度,导致输出缓冲区积压。
解决方案
请依次排查内存使用率突然升高的原因,并参考对应的解决方案解决问题。
排查是否写入大量新数据
排查方法:
查看性能监控的入流量与写QPS。如果入流量与写QPS的趋势与内存使用率的趋势一致,说明大量的数据写入导致内存使用率突然升高。
解决方案:
通过设置Key的过期时间自动清理不再需要的Key,或手动删除不再需要的Key。
升级实例规格,通过增加内存容量缓解内存使用率升高的问题。详情请参见变更实例配置。
如果您的实例为标准版,扩容内存规格后仍无法解决内存使用率高的问题,可以考虑升级为集群版,将数据分布到多个数据分片节点上,减轻单个数据分片节点的内存压力。详情请参见变更实例配置。
排查是否创建大量新连接
排查方法:
查看性能监控的连接数。如果连接数突然增长,且与内存使用率的趋势一致,说明大量新建连接导致内存使用率突然升高。
解决方案:
排查是否存在连接泄漏。
设置连接超时时间,自动关闭空闲连接。详情请参见设置客户端连接的空闲时间。
排查是否突发流量导致输入和输出缓冲区积压
排查方法:
查看性能监控的出入口流量使用率是否达到100%。
执行
MEMORY STATS
命令,查看clients.normal占用的内存是否过多。说明clients.normal反映了所有普通客户端连接的输入和输出缓冲区所占用的内存总量。
解决方案:
排查是否因客户端性能问题导致输出缓冲区积压
排查方法:
在实例中,执行MEMORY DOCTOR
命令,查看big_client_buf
的值。当big_client_buf=1时,代表至少有一个客户端的输出缓冲区占用内存较大。
解决方案:
执行CLIENT LIST
命令,查看哪个客户端的输出缓冲区内存占用量(omem
)较大。排查该客户端应用是否存在性能问题。