彷佛找到 OSChina 早上 8 点钟容易宕机的缘由

最近一段时间,OSChina 网站在早上 8 点出头的时候很容易由于数据库链接池爆满而致使网站宕机。表现的状况是数据库处理大量的查询,堆积大量并发链接,致使没法再链接到数据库,执行一个简单的查询速度也很是慢,数据库机器的 CPU 很高。java

但事实上早上 8 点并不是 OSC 网站的高峰期,高峰期的时候都不会挂,为何恰恰在这么一个没多少人访问的时间点宕机呢?mysql

找了好久没发现系统在 8 点这个时间点有什么特殊的任务要作,对数据库也作了一些调整,包括 “MySQL Can’t Create Thread: Errno 11 ” 的问题。sql

可是问题依旧。数据库

再次挨个检查系统 crontab 中定义的做业。其中自动构建 Lucene 索引的做业引发了注意。并发

*/5 8-22 * * * /data/oschina/build.sh lucene_build性能

系统每 5 分钟执行一次增量索引构建,该构建过程仅在一天早上8点到晚上10点钟进行。网站

我记得当初这么设置的缘由是有一个索引的构建容易出问题,为了不出问题时没人处理,所以设置了这个时间段,后来一直没去调整。ui

再查看系统跑 lucene 的进程,我靠,那么那么那么多。。。。。索引

赶忙一个 killall java 杀掉全部的 lucene 索引构建进程,没几秒钟数据库的链接就下来了,系统恢复正常访问。进程

因此我如今有 80% 的把握能肯定宕机问题就是由于这个索引构建进程致使的。并且索引构建自己不存在问题,问题出在时间点的设定上。试想白天高峰期时候 5 分钟执行一次历来没出过任何问题。也就是说通过了一个晚上(从晚上10点到早上8点这段时间)系统又有不少的数据,致使8点钟启动增量索引构建时一次性任务量很大,没法在下一个5分钟到来以前结束,因而不断启动新的进程,因而不断链接到数据库,因而数据库性能急剧降低,因而挂机。

好吧,It's my fault!

将 8-22 改成 * 后继续观察!

相关文章
相关标签/搜索