本篇是 G. T. Wang 網站伺服器於 2016 年 4 月 7 日下午當機停擺的記錄。
今天下午赫然發現我的 G. T. Wang 部落格竟然無預警停擺,網頁伺服器可以連得上去,但是顯示的內容卻是 nginx 的錯誤訊息,差點把我嚇死,馬上連上伺服器檢查,結果更讓我吃驚,查了 /var/log
底下相關的伺服器記錄,一時之間找不到關鍵的錯誤訊息,但是網站卻是處於停止服務的狀態。
error.log
,都是一大堆 php5-fpm
的錯誤:
2016/04/07 15:25:11 [error] 4743#0: *50 connect() to unix:/var/run/php5-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 66.249.84.208, server: blog.gtwang.org, request: "GET /feeds/posts/default HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "blog.gtwang.org"
接著去看 php5-fpm
的記錄檔,結果竟然沒有任何錯誤訊息在裡頭:
在一臉疑惑的情況下,嘗試使用 service
重新啟動 php5-fpm
服務也無效,後來實在不想浪費時間找,直接重開機試試看,結果重開機之後就恢復正常了,從發現問題到處理完大約花了 5 分鐘,但是在我發現問題之前,網站已經掛了 20 分鐘了,應該有影響到不少的使用者。
後來我仔細檢查伺服器的記錄檔,終於找到出問題的地方,主因出在 php5-fpm
的嚴重 bugs:
Apr 7 15:05:47 linode01 kernel: php5-fpm[17757]: segfault at 7ffcbc82b001 ip 000000000079fe74 sp 00007ffcbc823e70 error 6 in php5-fpm[400000+800000]
這種 segfault 問題通常不會有太明顯的錯誤訊息,而且 php5-fpm
出問題終止執行之後,使用 service
重新啟動似乎還會有問題,我猜可能是 pid 檔案之類的問題,不過我也不想找了,重開機可能會比慢慢找問題修正來得快。
我目前所使用的 Linux 發行版是 Ubuntu,這類的 Linux 比較不穩定,會出這種問題我也不意外,只是我之前沒有考慮網站長期營運的問題,經過這次的事件之後,我會認真考慮未來改用 CentOS 或 RHEL 了。
最後補充一下目前的系統環境資訊:
項目 | 版本 |
---|---|
Linux 發行版 | Ubuntu 14.04.4 LTS |
Linux 核心 | Linux linode01 4.5.0-x86_64-linode65 #2 SMP Mon Mar 14 18:01:58 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux |
php5 |
5.5.9+dfsg-1ubuntu4.14 |
php5-fpm |
5.5.9+dfsg-1ubuntu4 |
nginx |
1.4.6-1ubuntu3 |