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

jopen 10年前

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

GitHub: https://github.com/非死bookarchive/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"
</div> </div> </div> 来自:http://www.v2ex.com/t/147948?r=huangz