使用Discuz論壇的朋友們不知是否遇到過論壇后臺登陸非常慢的情況,本文介紹的分析思路和解決方案可能會對你有所啟發。
錯誤描述
同事反應說Discuz登錄論壇后臺非常慢,時不時出現502錯誤;好不容易登上論壇,根本無法在后臺操作。自己登錄后,在后臺也是無法操作,卡住不動了。
故障分析
登錄服務器,負載正常,但發現php-cgi竟然沒有一個在運行。按照以前的經驗,有以下幾點原因:
- MySQL慢查詢:登錄mysql服務器后,執行show full process后,并沒有發現查詢執行時間長的sql記錄,mysql錯誤日志也沒有報錯。
- 重啟php-fpm:service php-fpm restart,再次登錄后臺的時候,操作還是卡,看來不是這個原因。
- 惡意攻擊:通過分析web日志,沒有發現惡意攻擊的記錄。聯系硬防客服,抓包分析了一會,沒有在數據包中發現惡意數據,不過倒是發現一個ip在3-4秒內訪問管理頁面,硬防上屏蔽該ip后,后臺還是無法訪問。
- PHP日志分析:在php-fpm的日志中,頻繁出現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 執行腳本文件超時300秒。我對php-fpm.conf 對執行超時限制在300秒,超過這個數字就結束該進程,所以肯定是有什么東西,導致php卡住了。
了解此點之后,通過lsof -n | grep php-cgi | grep /data0/grep -v grep 查找php-cgi停在哪個文件或目錄,發現原來停在在discuz日志的目錄。
解決思路
將php-cgi故障反應給了同事,經同事研究分析,共享存儲,有寫入緩慢的現象。如果取消日志寫入,登錄后臺操作,正常,反之,一旦開啟,就會像起先那樣,后臺操作卡住了。所以可以判斷問題出在存儲的寫入緩慢。
檢測了存儲,整體寫入是正常的,檢測過程也顯示正常,所以懷疑跟文件系統有關。
臨時解決方法:將日志目錄移到本地服務器,并做好軟連接,觀察日志是否寫入正常。
徹底解決方法:換MooseFS代替NFS。過去的近一年時間,我們一直在逐步將論壇從NFS替換成MooseFS,跑下來非常穩定。可以在對論壇升級的時候執行這一步驟。
作者簡介:崔曉輝,網名coralzd,大眾網系統管理員,精通網站系統架構、Unix技術。gtalk:coralzd@gmail.com
原文鏈接:http://os.51cto.com/art/201112/305833.htm