Discuz論壇后臺卡及502錯誤的解決思路
原創(chuàng)【51CTO獨家特稿】使用Discuz論壇的朋友們不知是否遇到過論壇后臺登陸非常慢的情況,本文介紹的分析思路和解決方案可能會對你有所啟發(fā)。
錯誤描述
同事反應說Discuz登錄論壇后臺非常慢,時不時出現(xiàn)502錯誤;好不容易登上論壇,根本無法在后臺操作。自己登錄后,在后臺也是無法操作,卡住不動了。
故障分析
登錄服務器,負載正常,但發(fā)現(xiàn)php-cgi竟然沒有一個在運行。按照以前的經(jīng)驗,有以下幾點原因:
- MySQL慢查詢:登錄mysql服務器后,執(zhí)行show full process后,并沒有發(fā)現(xiàn)查詢執(zhí)行時間長的sql記錄,mysql錯誤日志也沒有報錯。
- 重啟php-fpm:service php-fpm restart,再次登錄后臺的時候,操作還是卡,看來不是這個原因。
- 惡意攻擊:通過分析web日志,沒有發(fā)現(xiàn)惡意攻擊的記錄。聯(lián)系硬防客服,抓包分析了一會,沒有在數(shù)據(jù)包中發(fā)現(xiàn)惡意數(shù)據(jù),不過倒是發(fā)現(xiàn)一個ip在3-4秒內(nèi)訪問管理頁面,硬防上屏蔽該ip后,后臺還是無法訪問。
- PHP日志分析:在php-fpm的日志中,頻繁出現(xiàn)Nov 22 00:09:05.217416 [WARNING] fpm_request_check_timed_out(), line 158: child 23796, script '/data/www/bbs/admincp.php' (pool default) execution timed out (300.099551 sec), terminating 執(zhí)行腳本文件超時300秒。我對php-fpm.conf 對執(zhí)行超時限制在300秒,超過這個數(shù)字就結(jié)束該進程,所以肯定是有什么東西,導致php卡住了。
了解此點之后,通過lsof -n | grep php-cgi | grep /data0/grep -v grep 查找php-cgi停在哪個文件或目錄,發(fā)現(xiàn)原來停在在discuz日志的目錄。
解決思路
將php-cgi故障反應給了同事,經(jīng)同事研究分析,共享存儲,有寫入緩慢的現(xiàn)象。如果取消日志寫入,登錄后臺操作,正常,反之,一旦開啟,就會像起先那樣,后臺操作卡住了。所以可以判斷問題出在存儲的寫入緩慢。
檢測了存儲,整體寫入是正常的,檢測過程也顯示正常,所以懷疑跟文件系統(tǒng)有關。
臨時解決方法:將日志目錄移到本地服務器,并做好軟連接,觀察日志是否寫入正常。
徹底解決方法:換MooseFS代替NFS。過去的近一年時間,我們一直在逐步將論壇從NFS替換成MooseFS,跑下來非常穩(wěn)定??梢栽趯φ搲壍臅r候執(zhí)行這一步驟。
作者簡介:崔曉輝,網(wǎng)名coralzd,大眾網(wǎng)系統(tǒng)管理員,精通網(wǎng)站系統(tǒng)架構(gòu)、Unix技術。gtalk:coralzd@gmail.com
【編輯推薦】