这是来自 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"
1
yuankui 2014-11-20 11:08:54 +08:00
赞,收藏~
|
2
owlsec 2014-11-20 11:13:27 +08:00 via iPad
666好东西
|
3
soli 2014-11-20 11:41:17 +08:00
终于支持 Markdown 了。
|
4
qdvictory 2014-11-20 11:51:37 +08:00
他这个的单位应该是微秒吧?
|
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 |
6
jk2r 2014-11-20 13:24:48 +08:00
线上Redis,要注意!
MONITOR命令,还是很损耗性能的,尤其是高并发时。 |
7
sujunj2005 2014-11-21 10:04:09 +08:00
果然是好东西啊,先收藏了回去慢慢玩
|
8
linxun 2015-05-29 08:29:58 +08:00
多谢
|