关于 Redis 的性能分析工具 Redis Faina - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Livid
65.57D
468.2D
V2EX    Redis

关于 Redis 的性能分析工具 Redis Faina

  •  3
     
  •   Livid
    PRO
    2014-11-20 11:04:16 +08:00 13390 次点击
    这是一个创建于 3988 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这是来自 Instagram 团队开源的工具,已经帮助我解决了两次 Redis 相关的性能问题。所以在这里写一篇短文稍微介绍一下这个工具。

    GitHub: https://github.com/facebookarchive/redis-faina

    Instagram 团队博客的官方文章: http://instagram-engineering.tumblr.com/post/23132009381/redis-faina-a-query-analysis-tool-for-redis

    这是一个用 Python 写的工具,所以在使用之前,请确保已经安装了 Python 的 redis 客户端:

    pip install redis 

    然后可以用这样的方式启动这个工具:

    redis-cli -p 6379 MONITOR | head -n <NUMBER OF LINES TO ANALYZE> | ./redis-faina.py 

    其中 -p 后面的参数是 Redis 的端口号,head -n 可以指定要采样的日志行数。

    所以其基本工作方式是,通过 MONITOR 指令收集指定行数的运行日志,然后可以把其中最慢的一些指令统计出来。这样你就可以在程序中进行调整,去掉会影响性能的这些调用,比如 KEYS 之类。

    因为 Redis 的性能通常是非常好的,所以如果看到最慢指令的输出中有超过 1000 毫秒的结果,那很有可能是服务器内存不够导致的问题。

    最好的情况下,是 Slowest Calls 中没有超过 100 毫秒的调用。这是优化目标。

    下面是 redis-faina 的一个输出例子。

    Overall Stats ======================================== Lines Processed 117773 Commands/Sec 11483.44 Top Prefixes ======================================== friendlist 69945 followedbycounter 25419 followingcounter 10139 recentcomments 3276 queued 7 Top Keys ======================================== friendlist:zzz:1:2 534 followingcount:zzz 227 friendlist:zxz:1:2 167 friendlist:xzz:1:2 165 friendlist:yzz:1:2 160 friendlist:gzz:1:2 160 friendlist:zdz:1:2 160 friendlist:zpz:1:2 156 Top Commands ======================================== SISMEMBER 59545 HGET 27681 HINCRBY 9413 SMEMBERS 9254 MULTI 3520 EXEC 3520 LPUSH 1620 EXPIRE 1598 Command Time (microsecs) ======================================== Median 78.25 75% 105.0 90% 187.25 99% 411.0 Heaviest Commands (microsecs) ======================================== SISMEMBER 5331651.0 HGET 2618868.0 HINCRBY 961192.5 SMEMBERS 856817.5 MULTI 311339.5 SADD 54900.75 SREM 40771.25 EXEC 28678.5 Slowest Calls ======================================== 3490.75 "SMEMBERS" "friendlist:zzz:1:2" 2362.0 "SMEMBERS" "friendlist:xzz:1:3" 2061.0 "SMEMBERS" "friendlist:zpz:1:2" 1961.0 "SMEMBERS" "friendlist:yzz:1:2" 1947.5 "SMEMBERS" "friendlist:zpz:1:2" 1459.0 "SISMEMBER" "friendlist:hzz:1:2" "zzz" 1416.25 "SMEMBERS" "friendlist:zhz:1:2" 1389.75 "SISMEMBER" "friendlist:zzx:1:2" "zzz" 
    8 条回复    2015-05-29 08:29:58 +08:00
    yuankui
        1
    yuankui  
       2014-11-20 11:08:54 +08:00
    赞,收藏~
    owlsec
        2
    owlsec  
       2014-11-20 11:13:27 +08:00 via iPad
    666好东西
    soli
        3
    soli  
       2014-11-20 11:41:17 +08:00
    终于支持 Markdown 了。
    qdvictory
        4
    qdvictory  
       2014-11-20 11:51:37 +08:00
    他这个的单位应该是微秒吧?
    keakon
        5
    keakon  
       2014-11-20 13:05:30 +08:00
    In this particular case, running a single MONITOR client can reduce the throughput by more than 50%. Running more MONITOR clients will reduce throughput even more.
    http://redis.io/commands/MONITOR
    jk2r
        6
    jk2r  
       2014-11-20 13:24:48 +08:00
    线上Redis,要注意!

    MONITOR命令,还是很损耗性能的,尤其是高并发时。
    sujunj2005
        7
    sujunj2005  
       2014-11-21 10:04:09 +08:00
    果然是好东西啊,先收藏了回去慢慢玩
    linxun
        8
    linxun  
       2015-05-29 08:29:58 +08:00
    多谢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5862 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 45ms UTC 02:53 PVG 10:53 LAX 19:53 JFK 22:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86