关于 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"