Discuz论坛后台卡及502错误的解决思路

使用Discuz论坛的朋友们不知是否遇到过论坛后台登陆非常慢的情况,本文介绍的分析思路和解决方案可能会对你有所启发。

错误描述

同事反应说Discuz登录论坛后台非常慢,时不时出现502错误;好不容易登上论坛,根本无法在后台操作。自己登录后,在后台也是无法操作,卡住不动了。

故障分析

登录服务器,负载正常,但发现php-cgi竟然没有一个在运行。按照以前的经验,有以下几点原因:

  1. MySQL慢查询:登录mysql服务器后,执行show full process后,并没有发现查询执行时间长的sql记录,mysql错误日志也没有报错。

  2. 重启php-fpm:service php-fpm restart,再次登录后台的时候,操作还是卡,看来不是这个原因。

  3. 恶意攻击:通过分析web日志,没有发现恶意攻击的记录。联系硬防客服,抓包分析了一会,没有在数据包中发现恶意数据,不过倒是发现一个ip在3-4秒内访问管理页面,硬防上屏蔽该ip后,后台还是无法访问。

  4. 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卡住了

解决思路

将php-cgi故障反应给了同事,经同事研究分析,共享存储,有写入缓慢的现象。如果取消日志写入,登录后台操作,正常,反之,一旦开启,就会像起先那样,后台操作卡住了。所以可以判断问题出在存储的写入缓慢。

检测了存储,整体写入是正常的,检测过程也显示正常,所以怀疑跟文件系统有关。

临时解决方法:将日志目录移到本地服务器,并做好软连接,观察日志是否写入正常。

彻底解决方法:换MooseFS代替NFS。过去的近一年时间,我们一直在逐步将论坛从NFS替换成MooseFS,跑下来非常稳定。可以在对论坛升级的时候执行这一步骤。