关于 V2EX 在 2014 年 6 月初遇到的性能问题

2014-06-10 11:41:41 +08:00
 Livid
大概是从 5 月中开始,页面的生成时间就越来越长,但是我一直没有找到原因。因为同样的代码,在开发环境里跑是 8ms,到了生产环境就变成 180ms,这太奇怪了。

而且这个性能问题在过去的几个星期里呈现恶化趋势。终于在 2014 年 6 月 10 号这天让网站彻底打不开了。

彻底打不开的那段时间,我看到 CPU 占用率最高的一个进程始终是 redis-server。所以这种情况下,需要的是一个能够 profiling redis 的工具,我在 GitHub 上找到了 Instagram 开源的这个工具:

https://github.com/Instagram/redis-faina

然后,在经历了之前半个月的各种难受和猜测之后,终于找到了原因:

我在代码里滥用了 KEYS 这条指令。

http://redis.io/commands/KEYS

找到问题根源之后,修复就很容易了。

所以几点总结就是:

* KEYS 的性能随着数据库尺寸的增大而越来越慢
* 在一个足够大的数据库上,连续的 KEYS 指令足以让 Redis 彻底堵住

13975 次点击
所在节点    Redis
74 条回复
qloog
2014-06-10 12:07:22 +08:00
怪不得早上打不开呢,原来确实是故障,以为我的网络问题呢~
cctvsmg
2014-06-10 12:08:24 +08:00
这么快,不太适应
感觉刷v2ex的一大乐趣没了
nobita
2014-06-10 12:15:26 +08:00
good job
lm902
2014-06-10 12:15:39 +08:00
lazyphp
2014-06-10 12:15:50 +08:00
难怪刚才访问 出504了。
lm902
2014-06-10 12:16:17 +08:00
好不容易才打开一个页面
yhf
2014-06-10 12:35:00 +08:00
@Livid 能否透露一下KEYS现在大约是多少量级?
kslr
2014-06-10 12:35:54 +08:00
昨晚上4点左右504了
lovelotuslonely
2014-06-10 12:36:45 +08:00
@mxi1 這是啥兔,耳朵那麼大
soli
2014-06-10 12:41:09 +08:00
请问 @Livid 能不能给点数据?比如,KEY 到多大数据量的时候开始出现明显的性能下降?

还有,具体的解决办法能透露一下么?
Yuansir
2014-06-10 12:42:37 +08:00
也被KEYS坑过
karvinchen
2014-06-10 12:50:17 +08:00
学习了
snowhs
2014-06-10 12:53:45 +08:00
我就是想问下配图想表达啥...
slixurd
2014-06-10 12:55:52 +08:00
KEY这条指令我记得还在阿里还是腾讯的笔试题上出过
让我们阅读英文的manual,然后说出用法和注意事项以及猜测实现来着
iptux
2014-06-10 12:57:38 +08:00
@snowhs 配图文件大小约3M
Livid
2014-06-10 13:07:28 +08:00
@soli 100 万左右。

这次的解决方法是,需要用到 KEYS 的地方,其实是我们目前的在线人数统计,现在这个地方已经加上了缓存,所以对 KEYS 的调用就大大减少了。
Kabie
2014-06-10 13:14:13 +08:00
。。。我说怎么之前经常打不开呢……
PotatoBrother
2014-06-10 13:15:48 +08:00
现在我这已经40ms 以内了,终于可以顺畅的逛 V2 了
cutehalo
2014-06-10 13:18:22 +08:00
Livid会卖萌 谁也挡不住 XD
decken
2014-06-10 13:30:36 +08:00

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

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

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

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

© 2021 V2EX