V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Livid
V2EX  ›  Redis

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

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

    这是来自 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   ·   实用小工具   ·   2733 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:16 · PVG 18:16 · LAX 02:16 · JFK 05:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.