找到 OSChina 早上 8 点钟容易宕机的原因 ?

Posted 沧海一滴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找到 OSChina 早上 8 点钟容易宕机的原因 ?相关的知识,希望对你有一定的参考价值。

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

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

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

但是问题依旧。

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

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

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

我记得当初这么设置的原因是有一个索引的构建容易出问题,为了避免出问题时没人处理,因此设置了这个时间段,后来一直没去调整。

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

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

所以我现在有 80% 的把握能确定宕机问题就是因为这个索引构建进程导致的。而且索引构建本身不存在问题,问题出在时间点的设定上。试想白天高峰期时候 5 分钟执行一次从来没出过任何问题。也就是说经过了一个晚上(从晚上10点到早上8点这段时间)系统又有很多的数据,导致8点钟启动增量索引构建时一次性任务量很大,无法在下一个5分钟到来之前结束,于是不断启动新的进程,于是不断连接到数据库,于是数据库性能急剧下降,于是挂机。

好吧,It‘s my fault!

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

http://www.tuicool.com/articles/Ybe22e2

 

以上是关于找到 OSChina 早上 8 点钟容易宕机的原因 ?的主要内容,如果未能解决你的问题,请参考以下文章

一起来吃GitHub大规模宕机的瓜

实习第八天

12小时超级马拉松赛记

如何使用Python让某段程序固定在每天早上八点钟开始运行

杭州云栖·2050大会-追逐早上七八点钟的太阳-源点

linux服务器宕机分析/性能瓶颈分析