【51CTO.com 独家特稿】春节还没过完就接到同事的电话,说论坛访问速度慢,遭致用户强烈的投诉,要求我马上处理。这个bbs是运行在Redhat AS 5上,由apache、mysql、php和discuz组成,有129550位注册会员,同时在线的最高人数11128,按照当前的硬件条件,应该满足访问需求(新上线的HP服务器)。在浏览器输入论坛的url, 果然很慢,再联系朋友帮忙测试,打开网络还是很慢。
先不管这么多,登录到服务器上去看看再做下一步打算。还好,登录比较顺利。运行命令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 |
这个结果表明请求数比较大但却没有得到适时的响应,再看一下这些请求都是发往那些服务端口,只需运行netstat –anp | grep –v unix ,发现绝大部分请求是针对80端口的。由这个现象基本可以断定是apache引起的麻烦。那好,我就从这里着手。关掉apache服务再启用,这时查看http的进程,马上就是256.既然这样,我就在配置文件httpd.conf加入下面的代码块:
|
StartServers 10 MinSpareServers 10 MaxSpareServers 15 MaxClients 1500 ServerLimit 2000 MaxRequestsPerChild 10000 |
执行apachectl –t ,报错,警告说MaxClients超过256,以至于apache服务不能正常运行,该小一点呢?好,改成150,运行后,查httpd进程数,刚好150。用浏览器访问论坛,还是十分的缓慢。看来得朝大的方向改,否则瞬间apache达到最大连接数,就不再响应新的请求。从前面的操作(把MaxClients的值改大超过256)可以知道,必须重新编译和安装apache才可以达到目的。当时曾经尝试把apache置于worker模式,但在编译时涉及到php,不想再节外生枝,就不再继续。我用的apache版本是httpd-2.2.6,进安装包所在的目录(如我的目录是/root/httpd-2.2.6,即解压httpd-2.2.6.tgz后生成的目录),修改文件 server/mpm/prefork/prefork.c,把第77行的值改成1500,如下图所示:
![]() |
然后再编译,运行和安装。再使配置文件 httpd.conf MaxClients的值为1500,运行apachectl –t检查语法是否正确,无误后启用apache服务 apachectl start .现在,我们再回过头来察看apache的进程数,基本上在170-400这个范围,并且在不停的变化,隔设定的1500这个值还差得远;另外那些等待的请求值也降低了,这意味apache能正常响应用户的请求。在浏览器输入论坛的url,速度正常,再请其他朋友帮着测试,一切正常。
【51CTO.COM 独家特稿,转载请注明出处及作者!】
|
· 纵横网络之间谁能相抗 .. · 向着最安全的系统前进 .. · 居安思危 网络风险评估.. · 如何使用Nikto漏洞扫描.. · 发现新病毒 ntldr.exe .. · J0ker的CISSP之路:系.. |
· 对宽带帐号安全威胁分.. · 交换机安全技术 如何架.. · 北京市交管局奥运指挥.. · 自动连接网络打印机的.. · 串口故障解除 · 跪求:apache各项详解 |
|
||||
| · 微软出价446亿美元收购.. · 打造安全网络环境 · 网络安全产品检验规范 · 华为、贝恩资本22亿美.. · 社会工程学与网络安全 · 离职员工安全隐患 · 杀毒软件评测专题 · Sun以10亿美元并购开源.. |
· 中间件应用技术专题 · 杀毒软件优化和使用技巧 · 信息安全等级保护专题 · 补丁自动分发管理策略.. · 杀毒王牌 · AMD Phenom三核处理器.. · 国际文档格式标准开战 · 51CTO主编推荐经典专题 |
|||
|
||||
| · VPN技术 · SQL Server 2008/2005.. · SOA 面向服务架构 · 子网掩码教程 · SQL Server 2008/2005.. · 中间件应用技术专题 · 深入了解PGP加密技术 · MySQL数据库备份 |
· 病毒查杀专题 · VPN技术 · Solaris 10 配置管理 · Linux 基础 · SSL VPN详细知识 · Linux防火墙 · 路由器设置与口令恢复 · Linux 集群技术专题 |
|||
|
||||
| · VPN技术 · SQL Server 2008/2005.. · 中间件应用技术专题 · SQL Server 2008/2005.. · SOA 面向服务架构 · 子网掩码教程 · MySQL数据库备份 · 身份认证技术 |
· 病毒查杀专题 · 清除流氓软件——51CTO.. · SSL VPN详细知识 · Sniffer安全技术从入门.. · 常用交换机典型配置 · 路由器设置与口令恢复 · Linux 集群技术专题 · VPN技术 |
|||