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

2014-11-20 11:04:16 +08:00
 Livid

这是来自 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"
12617 次点击
所在节点    Redis
8 条回复
yuankui
2014-11-20 11:08:54 +08:00
赞,收藏~
owlsec
2014-11-20 11:13:27 +08:00
666好东西
soli
2014-11-20 11:41:17 +08:00
终于支持 Markdown 了。
qdvictory
2014-11-20 11:51:37 +08:00
他这个的单位应该是微秒吧?
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
2014-11-20 13:24:48 +08:00
线上Redis,要注意!

MONITOR命令,还是很损耗性能的,尤其是高并发时。
sujunj2005
2014-11-21 10:04:09 +08:00
果然是好东西啊,先收藏了回去慢慢玩
linxun
2015-05-29 08:29:58 +08:00
多谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/147948

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX