Discuz 防水墙插件 占用CPU过高问题

这两天帮人解决一个网站运维的问题,问题是CPU的占用率时不时的到达100%。

环境是CentOS 5.2 + MySQL +Apache + PHP ,含有Discuz站(X2.5)和Dede站。

刚开始以为是MySQL或者Apache配置的问题。于是执行了一揽子的优化计划。但是后来就知道,出现这种问题,而且负载量也不高的情况下,肯定是程序出了问题。

应该第一时间记录Apache、MySQL的日志,从中找问题。但是走了弯路,跑到性能优化上去了。

设置MySQL日志,5.5版本的需要设置general-log

  log-output=FILE  设置日志用文件存储。

general-log_file = file_path_of_log 设置日志文件保存在那个文件里,(/mnt/mysql/data/mylog.log)    general-log=1      开启general-log 功能。    slow-query-log=1    开启slow-query-log 功能(是对日志的一种筛选,只记录查询时间超过指定值的查询)    log-bin = 0     开启log-bin 功能(不做主从的话一般不需要开启)

最后在MySQL的日志中发现了问题,就是CPU上升到100% 的时候,有一条查询会疯长!!

SELECT authorid FROM pre_forum_thread where tid=69817 ORDER BY tid DESC

而且这条语句之前会有

SELECT tid FROM pre_forum_threadmod where reason=’防水墙自动处理’ and dateline>360 ORDER BY tid DESC

这说明,Disduz会自动将防水墙过滤的主题搜索出来,然后再找到他们发布者的authorid。这是“防水墙扩展插件1.0“版本的BUG!!

系统中垃圾信息有将近三万多条,所以每次系统触发查询,就一下子三万多条查询涌向MySQL,负载自然就起来了。如果同时触发了多次,

系统基本就死掉了。

解决方法:

1. 清空回收站中的垃圾信息

2. 升级 防水墙 插件到1.5.1版本,升级 防水墙扩展 插件到1.5.1版本

重新运行服务,四个小时,CPU占用率在20%左右,从没超过50%。问题解决!

PS:

1. MySQL 配置文件优化,由于是MyISAM的引擎,因此设置key_buffer_size 378M (内存1G) 等等。

http://www.sudu.us/linux-mysql-optimize/

http://www.fwvv.net/info/2007/12/06/20071206-54032.shtml

2. Apache优化,主要是MPM优化,设置了prefork方式的各种参数。

即使是不成熟的尝试,也胜于胎死腹中的策略。

Discuz 防水墙插件 占用CPU过高问题

相关文章:

你感兴趣的文章:

标签云: