一、故障描述
客户业务是基于LAMP架构的php站点,由于每秒钟访问量在230左右,导致了用户的网站访问很缓慢,打开时间在11秒左右,严重影响了业务和客户体验度。
二、排查过程
2.1 从服务器系统方面考虑:CPU、内存、IO、网络等综合查看都很正常;
2.2 从数据库方面排查:数据库压力不大,运行正常;
2.3 查看apache的进程数75个,显然和现在的并发量相差很大,解决方法就是调整apache的进程数。
三、处理过程
3.1 首先了解Apache采用的MPM(Multi -Processing Modules,多道处理模块)
MPM是Apache的核心,它的作用是管理网络连接、调度请求。Apache2.0中MPM有3种类型,分别为perfork、worker和event:
A.perfork从Apache1.3中继承下来的,它采用的是进程管理方式,可以提供更可靠的性能和更好的兼容性;
B.worker是Apache2.0中新增加的方式,它采用了线程控制方法,可以比perfork更节约系统开销、处理更多的数据量,但同时兼容性并不是很好,很多旧的程序无法工作在worke下;
C.event仍处于试验阶段,它为每个任务分配不同的进程池,目前不应该采用。
3.2 通过命令 httpd -l 可以获取目前Apache采用的是perfork MPM模式
[root@localhost apache]# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
3.3 修改配置文件httpd-mpm.conf重要参数
重启httpd 但是查看了配置不生效,经过查看日志错误:
WARNING: MaxClients of 1500 exceeds ServerLimit value of 256 servers,
lowering MaxClients to 256. To increase, please see the ServerLimit
directive.
[Fri Dec 29 02:55:50 2006] [warn] WARNING: Attempt to change ServerLimit ignored during restart
[Fri Dec 29 02:55:50 2006] [notice] Apache configured -- resuming normal operations
3.4 针对日志添加了ServerLimit和ThreadLimit这两个指令
vim httpd-mpm.conf
ServerLimit 768
MaxClients 768
具体参数大小衡量参考http://blog.csdn.net/huoyunshen88/article/details/34105561
3.5 停止服务器再重启配置生效
ServerLimit和ThreadLimit这两个指令决定了活动子进程数量和每个子进程中线程数量的硬限制。要想改变这个硬限制必须完全停止服务器然后再启动服务器。
四、故障总结
之前看到很多apache针对StartServers、MinSpareServers、MaxSpareServers等优化的文章,而少有在生产环境中针对apache高并发的优化,这次的故障解决让我感觉实践出真理。
本文转自 freeterman 51CTO博客,原文链接:http://blog.51cto.com/myunix/1975537,如需转载请自行联系原作者