Redis性能问题

常规排查操作

1、Redis-cli命令行界面访问到Redis服务器

2、输入info memory命令,返回与内存相关的数据。

used_memory:由 Redis 分配器分配的内存总量,包含了redis进程内部的开销和数据占用的内存,以字节(byte)为单位

used_memory_human:已更直观的单位展示分配的内存总量。

used_memory_rss:向操作系统申请的内存大小。与 top 、 ps等命令的输出一致。

used_memory_rss_human:已更直观的单位展示向操作系统申请的内存大小。

used_memory_peak:redis的内存消耗峰值(以字节为单位)

used_memory_peak_human:以更直观的格式返回redis的内存消耗峰值

total_system_memory:整个系统内存

total_system_memory_human:以更直观的格式显示整个系统内存

used_memory_lua:Lua脚本存储占用的内存

used_memory_lua_human:以更直观的格式显示Lua脚本存储占用的内存

maxmemory:Redis实例的最大内存配置

maxmemory_human:以更直观的格式显示Redis实例的最大内存配置

maxmemory_policy:当达到maxmemory时的淘汰策略

mem_fragmentation_ratio:碎片率,used_memory_rss/ used_memory

mem_allocator:内存分配器

当内存使用达到设置的最大阀值时,需要选择一种key的回收策略,可在Redis.conf配置文件中修改“maxmemory-policy”属性值。 Redis 淘汰策略,如下:

volatile-lru:使用LRU算法从已设置过期时间的数据集合中淘汰数据。

volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰。

volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰。

allkeys-lru:使用LRU算法从所有数据集合中淘汰数据。

allkeys-random:从数据集合中任意选择数据淘汰

no-enviction:禁止淘汰数据。

若是Redis数据集中的key都设置了过期时间,那么“volatile-ttl”策略是比较好的选择。但如果key在达到最大内存限制时没能够迅速过期,或者根本没有设置过期时间。那么设置为“allkeys-lru”值比较合适,它允许Redis从整个数据集中挑选最近最少使用的key进行删除(LRU淘汰算法)。

参考:Redis性能问题排查解决手册(七)

异常:占用内存飙升

1、 redis-cli -h 192.168.0.151 -p 6379

2、执行 info

观察info信息,clients:有一点引起了怀疑: client_longes_output_list有些异常高。

服务端和客户端交互时,分别为每个客户端设置了输入缓冲区和输出缓冲区,这部分如果很大的话也会占用Redis服务器的内存。

client_longest_output_list高,应该是输出缓冲区占用内存较大,也就是有大量的数据从Redis服务器向某些客户端输出。

3、执行client list命令 redis-cli -h host -p port client list | grep -v "omem=0"

来查询输出缓冲区不为0的客户端连接,于是查询到祸首monitor。

 monitor的模型是这样的,它会将所有在Redis服务器执行的命令进行输出,通常来讲Redis服务器的QPS是很高的,也就是如果执行了monitor命令,Redis服务器在Monitor这个客户端的输出缓冲区又会有大量“存货”,也就占用了大量Redis内存。

4、执行ps -ef | grep monitor,查找对应进程,关闭掉monitor命令的进程

参考:Redis上踩过的一些坑-美团_Java我人生的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值