日期:2014-05-16  浏览次数:20787 次

apache访问慢,如何解决
错误日志一直在报这些错误,现在文件有2G大

piped log program 'bin/rotatelogs.exe -l logs/weichai_en_%Y%m%d_%H.log 3600' failed unexpectedly
/bin/sh: bin/rotatelogs.exe: No such file or directory
piped log program 'bin/rotatelogs.exe -l logs/weichai_cn_%Y%m%d_%H.log 3600' failed unexpectedly
piped log program 'bin/rotatelogs.exe -l logs/weichai_ru_%Y%m%d_%H.log 3600' failed unexpectedly
/bin/sh: bin/rotatelogs.exe: No such file or directory
piped log program 'bin/rotatelogs.exe -l logs/weichai_en_%Y%m%d_%H.log 3600' failed unexpectedly
/bin/sh: bin/rotatelogs.exe: No such file or directory
/bin/sh: bin/rotatelogs.exe: No such file or directory
piped log program 'bin/rotatelogs.exe -l logs/weichai_cn_%Y%m%d_%H.log 3600' failed unexpectedly
piped log program 'bin/rotatelogs.exe -l logs/weichai_ru_%Y%m%d_%H.log 3600' failed unexpectedly
/bin/sh: bin/rotatelogs.exe: No such file or directory
piped log program 'bin/rotatelogs.exe -l logs/weichai_en_%Y%m%d_%H.log 3600' failed unexpectedly
/bin/sh: bin/rotatelogs.exe: No such file or directory
/bin/sh: bin/rotatelogs.exe: No such file or directory
piped log program 'bin/rotatelogs.exe -l logs/weichai_cn_%Y%m%d_%H.log 3600' failed unexpectedly
/bin/sh: bin/rotatelogs.exe: No such file or directory
piped log program 'bin/rotatelogs.exe -l logs/weichai_ru_%Y%m%d_%H.log 3600' failed unexpectedly
piped log program 'bin/rotatelogs.exe -l logs/weichai_en_%Y%m%d_%H.log 3600' failed unexpectedly
/bin/sh: bin/rotatelogs.exe: No such file or directory
piped log program 'bin/rotatelogs.exe -l logs/weichai_cn_%Y%m%d_%H.log 3600' failed unexpectedly
/bin/sh: bin/rotatelogs.exe: No such file or directory
piped log program 'bin/rotatelogs.exe -l logs/weichai_ru_%Y%m%d_%H.log 3600' failed unexpectedly
/bin/sh: bin/rotatelogs.exe: No such file or directory
/bin/sh: bin/rotatelogs.exe: No such file or directory
piped log program 'bin/rotatelogs.exe -l logs/weichai_en_%Y%m%d_%H.log 3600' failed unexpectedly

------解决方案--------------------
1、首先,在页面访问变慢情况发生时,使用 top 命令查看了服务器的负载情况,发现负载并不高,初步估计不是程序的问题。 
2、然后,查看了线程中的 httpd 的数量, ps -aux | grep httpd | wc -l 发现,线程数已经达到了 apache 设置的最大值。由此断定是网站访问人数过多造成了访问过慢。 
3、为了验证,查看了连接数和当前的连接数,分别是 
netstat -ant | grep $ip:80 | wc -l 
netstat -ant | grep $ip:80 | grep EST | wc -l 
发现果然,连接数特别多,远远超过我们的估计值。 
4、刚开始的时候,对于服务器的 MPM 配置方式不是特别的熟悉,认为修改服务器配置可以解决问题。主要的配置部分包括 prefork 模式 或者 work 模式的配置,下面是一些简单的介绍。

prefork 模式: 
以 prefork 模式工作的 apache 的默认配置: 
<IfModule mpm_prefork_module> 
ServerLimit 2000
StartServers 5 #指定服务器启动时建立的子进程数量 
MinSpareServers 5 #指定空闲子进程的最小数量 
MaxSpareServers 10 #指定空闲子进程的最大数量 
MaxClients 150 #指定同一时间客户端最大接入请求的数量(单个进程并发线程数),任何超过该限制的请求都将进入等候队列,一旦一个连接被释放,队列中的请求将得到服务 
MaxRequestsPerChild 0 #指定每个子进程在其生存周期内允许伺服的最大请求数量,默认为10000,0表示子进程永远不结束 
</IfModule> 
prefork 控制进程在最初建立“StartServers”个子进程后,为了满足 MinSpareServers 设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。 
MaxSpareServers 设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比 MinSpareServers小,Apache会自动把其调整为 MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。 
MaxClients是这些指令中最为重要的一个,设定的是 Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep httpd|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制不能大于256。在 apache2 中通过ServerLimit指令无须重编译Apache就可以加大MaxClients。 
虽然通过设置ServerLimit,我们可以把MaxClients加得很大,但是往往会适得其反,系统