【IT168 报道】春节还没过完就接到同事的电话,说论坛访问速度慢,遭致用户强烈的投诉,要求我马上处理。这个bbs是运行在Redhat AS 5上,由apache、mysql、php和discuz组成,有129550位注册会员,同时在线的最高人数11128,按照当前的硬件条件,应该满足访问需求(新上线的HP服务器)。在浏览器输入论坛的url, 果然很慢,再联系朋友帮忙测试,打开网络还是很慢。
恶意攻击?mysql瘫痪?
先不管这么多,登录到服务器上去看看再做下一步打算。还好,登录比较顺利。运行命令uptime看系统负载,很低呀,再运行命令top,跟uptime得出的结论基本吻合,于是得出结论:系统负载不大。
是否被恶意攻击呢?基于这个想法,察看系统帐号—打开文件 /etc/passwd,没看见任何异常;运行命令 iptables –L –n 发现防火墙规则仍按我当初设定的策略执行,这些迹象表明,系统不存在安全问题。
那会不会是mysql的性能问题呢?用mysql客户端连接数据库,察看负载,其情况如下:
mysql> show processlist;
+---------+-----------+-----------+--------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+---------+-----------+-----------+--------+---------+------+-------+------------------+
| 1917230 | bbsdiscuz | localhost | discuz | Sleep | 284 | | NULL |
| 1917412 | bbsdiscuz | localhost | discuz | Sleep | 223 | | NULL |
| 1917442 | bbsdiscuz | localhost | discuz | Sleep | 222 | | NULL |
| 1917554 | bbsdiscuz | localhost | discuz | Sleep | 205 | | NULL |
| …………………..省略若干………………………..
| 1918404 | bbsdiscuz | localhost | discuz | Sleep | 0 | | NULL |
+---------+-----------+-----------+--------+---------+------+-------+------------------+
19 rows in set (0.00 sec)
从输出结果看,连接数和保持时间也在正常范围内。以前曾经有过mysql数据库连接数过多(达到设定的最大连接数)及会话保持时间(Time)过长的事故,从而导致网站访问速度变慢,以至于无法忍受。由此分析,这个故障不是由mysql数据库所引起的。
现在还剩下apache了,看来该怀疑一下它了。我们先看看有多少个httpd进程,其过程如下:
[root@web1 ~]# ps aux | grep httpd | grep -v grep | wc -l
256
结果刚好是apache默认设置的最大连接数,再执行 [root@web1 ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 其运行结果如下所示:
LAST_ACK 3
SYN_RECV 628
…………省略若干…………
TIME_WAIT 524