Redis 开启monitor监视器的性能消耗

之前介绍了redis的monitor,今天有朋友问monitor是否能长时间开启,我知道monitor会有较大性能开销,但不清楚具体消耗的程度,就测试了一下

测试过程

 

以一个monitor为例,使用redis-benchmark分别测试monitor开启前后的性能

redis-benchmark -c 10 -n 100000 -q

开启前结果

PING_INLINE: 92506.94 requests per second
PING_BULK: 97943.19 requests per second
SET: 94786.73 requests per second
GET: 99403.58 requests per second
INCR: 89766.61 requests per second
......

开启后结果

PING_INLINE: 76569.68 requests per second
PING_BULK: 67294.75 requests per second
SET: 44404.97 requests per second
GET: 60132.29 requests per second
INCR: 49382.71 requests per second
......

结果对比

开启后的性能明显低了很多,例如:

SET -53%

GET -39%

INCR -44%

实际案例

 

美团就遇到过monitor的性能影响问题

问题现象

redis-cluster中的某个分片内存飙升,明显高于其他分片,持续增长,并且主从的内存使用量并不一致

分析过程

(1)查看info信息,发现client_longest_output_list值异常

client_longest_output_list 是当前客户端连接的最大输出列表

此值过大说明输出缓冲区占用内存较大,也就是有大量的数据从Redis服务器向某些客户端输出

(2)使用client list命令查看omem值大于0的

client List 命令用于返回所有连接到服务器的客户端信息和统计数据

omem 表示输出缓冲区和输出列表占用的内存总量

查看结果列表,关注 cmd(最近一次执行的命令) 属性值,发现了异常:monitor,说明某client开启了监视器,造成大幅性能影响


所以通过自测和他人的案例,说明monitor只能用于短期调试,不能长期开启

 

posted @ 2016-10-17 15:56  天涯逐梦  阅读(3966)  评论(0编辑  收藏  举报