【程序猿同事的分享】 redis性能问题诊断利器

redis-faina是一款非常好用的redis性能诊断工具,如果你的redis server遇到性能问题,比如cpu非常高,那么可以使用redis-faina来分析问题原因。

redis-faina 是由Instagram 开发并开源的一个Redis 查询分析小工具,GitHub地址: https://github.com/facebookarchive/redis-faina。

它是通过Redis的MONITOR命令来实现的,通过对在Redis上执行的query进行监控,统计出一段时间的query特性,这个工具是用Python开发的,意味着我们可以很容易的对它进行修改

为什么极力推荐redis-faina,因为我们线上多次redis cpu非常高的问题都是靠它分析诊断的

先来看下它的使用方法:

redis-faina.py --help
usage: redis-faina.py [-h] [--prefix-delimiter PREFIX_DELIMITER]
                      [--redis-version REDIS_VERSION]
                      [input]

positional arguments:
  input                 File to parse; will read from stdin otherwise

optional arguments:
  -h, --help            show this help message and exit
  --prefix-delimiter PREFIX_DELIMITER
                        String to split on for delimiting prefix and rest of
                        key
  --redis-version REDIS_VERSION
                        Version of the redis server being monitored

再来看下它的输出:

redis-cli -h 192.168.1.111 -p 6302 -a redis_password monitor|head -10000|redis-faina.py --redis-version=2.8

Overall Stats
========================================
Lines Processed         80000    ##总的处理命令数
Commands/Sec            19940.07 #qps

Top Prefixes #前缀最多的数据,默认使用:作为前缀,可以使用参数  --prefix-delimiter aaa 来调整
========================================
__sentinel__    5       (0.01%)

Top Keys #访问最多的对象
========================================
Dredis_ID_ZSET_1_1176054               4861    (6.08%)
Dredis_ID_ZSET_1_160                   4811    (6.01%)
online--client--Rpc_Service_Method      3357    (4.20%)
Dredis_ID_ZSET_1_101009                2045    (2.56%)
Dredis_ID_ZSET_1_334109063             1781    (2.23%)
Dredis_ID_ZSET_1_336511050             1697    (2.12%)
Dredis_ID_ZSET_1_5811013               1579    (1.97%)
Dredis_ID_ZSET_1_203                   1539    (1.92%)

Top Commands #操作最多的命令
========================================
EXISTS          36245   (45.31%)
ZRANK           31308   (39.13%)
GET             5616    (7.02%)
EXPIRE          2048    (2.56%)
INCR            1196    (1.49%)
RPUSH           664     (0.83%)
ZADD            647     (0.81%)
ZREVRANGE       458     (0.57%)

Command Time (microsecs) #响应时间分布
========================================
Median          24.25
75%             39.0
90%             90.0
99%             463.0

Heaviest Commands (microsecs) #总体耗时最长的命令
========================================
EXISTS          1445269.75
ZRANK           1127109.75
GET             767743.0
EXPIRE          200610.0
INCR            157524.5
ZRANGEBYSCORE   74118.25
ZCOUNT          56930.0
ZADD            29975.75

Slowest Calls #最慢的几个操作
========================================
2164.0          "GET" "__redis__join_8-3060024150"
2150.75         "GET" "__redis__join_8-3047955946"
1950.0          "ZRANK" "Dredis_ID_ZSET_1_3385004" "788237518"
1936.25         "INCR" "439635ad787cb069213ff502a17505bc"
1855.25         "GET" "__redis__join_8-3098250013"
1819.0          "ZRANGEBYSCORE" "Likedredis__129164011" "1.466515899404E12" "9.223372036854776E18" "limit" "0" "2147483647" ...
1777.25         "GET" "__redis__join_8-3058403444"
1766.0          "EXPIRE" "000b05d09e9ae9d4a451a29a369d644e" "60"

可以看到redis-faina的使用非常简单,结果输出非常详细,并且简单易懂。上面输出是某产品最近一次CPU利用率非常高时的一个报告,通过这份输出报告可以很明显的看到,是因为大量ZSet操作引起的问题。

我们这边业务通常连的都是一个redis集群(sentinel, redis cluster, ncr),开发同学要自己排查CPU高问题怎么做呢?

1.找到哨兵监控(建议通过 http://owl.hz.netease.com/main/#!/redis 管理自己的redis集群)

2.找到集群中cpu较高的redis实例,对该实例使用redis-faina收集诊断信息

切记“monitor|head -10000”这里不宜太大,否则可能造成一定cpu消耗,一般收集个2-3s差不多,比如qps是10000 那么head -20000比较合理

支持下我同事写的干货文章!
作者:杜明友
如果你看到这里,别忘了点赞转发收藏!还有关注我噢~
你的支持是我更新的动力
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值