Apache:server reached MaxClients setting...的问题及解决办法

2014-05-04 11:04:04  雅事达网络 我有话说(184人参与)

最近阿里云服务器宕机,找到apache的日志/var/log/httpd/error_log文件中有一条错误信息:

[Fri Mar 04 10:48:20 2011] [error] server reached MaxClients setting, consider raising the MaxClients setting

【解决办法】

1、检查了一下,这是由于并发链接数太多导致的,后来查了一下apache的文档,发现可以通过修改apache的配置文件中的MaxClients参数来调整。但是/alidata/server/httpd/conf/httpd.conf中没有MaxClients这个参数,怎么破?

2、经过仔细分析,httpd.conf 调用了 extra/httpd-mpm.conf文件,会不会问题在这里?

查看 extra/httpd-mpm.conf,果然里面有prework和worker的配置信息

3、在调整之前首先要检查一下apache运行在哪一种模式下是prefork还是worker(具体prefork和worker有什么区别,可以google以下),如果不知道自己的apache是那种模式,可以使用:

>httpd -l 

命令来检查,出现prefork.c,说明是prefork模式的

4、找到extra/httpd-mpm.conf中对应的配置部分来修改。

这里我们首先先来重现一下上面的那个问题,先写一个php的测试程序test.php,并将其放在/var/www/html/test.php位置,文件内容比较简单,模拟一个简单的页面,内容如下:

 

  1. <?  
  2. sleep(1);  
  3. phpinfo();  
  4. ?>  

 

 

然后可以通过apache自带的测试工具ab来做一下测试,运行“ab -c 512 -n 100000  http://localhost/test.php”来做测试,其中“-n 100000”是指总共发十万个请求,“-c 512”是指并发512个请求,运行后可以发现成功的请求很少,并且很快在日志中就会出现上面那个错误,这是由于我的环境中的apache运行的prefork模式,其中MaxClients参数默认是256,所以当并发很高这里是512的时候就会出现这个错误。

下面我们来修改一下参数,将其中

 

  1. <IfModule prefork.c>  
  2. StartServers       8  
  3. MinSpareServers    5  
  4. MaxSpareServers   20  
  5. ServerLimit      256  
  6. MaxClients       256  
  7. MaxRequestsPerChild  4000  
  8. </IfModule>  

 

 

修改为

 

  1. <IfModule prefork.c>  
  2. StartServers     100  
  3. MinSpareServers  100  
  4. MaxSpareServers  100  
  5. ServerLimit     1024  
  6. MaxClients      1024  
  7. MaxRequestsPerChild  4000  
  8. </IfModule>  

 

 

注意这里我配置了MaxClients=1024,而测试只用了并发512个请求,留了一定的余地,这个可以在具体环境中再做调整。

然后重新启动apache:

> service httpd restart

再次运行“ab -c 512 -n 100000  http://localhost/test.php”,可以发现所有的请求都正常完成,并且日志中也不再有上面那个错误。

 

【参考】:

http://blog.csdn.net/kongxx/article/details/6228078

http://blog.sina.com.cn/s/blog_4b856bcb0100wtrg.html

 

分享到:

已有37条评论,共184人参与

还没有评论
最新评论刷新
建海666
这里是博客评论区,请登录
32分钟前
果果明赫
这里是博客评论区,请登录
60分钟前