天天看點

找到 OSChina 早上 8 點鐘容易當機的原因 ?

最近一段時間,OSChina 網站在早上 8 點出頭的時候很容易因為資料庫連接配接池爆滿而導緻網站當機。表現的情況是資料庫處理大量的查詢,堆積大量并發連接配接,導緻無法再連接配接到資料庫,執行一個簡單的查詢速度也非常慢,資料庫機器的 CPU 很高。

但事實上早上 8 點并非 OSC 網站的高峰期,高峰期的時候都不會挂,為什麼偏偏在這麼一個沒多少人通路的時間點當機呢?

但是問題依舊。

再次挨個檢查系統 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