加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

apache服务器假死现象分析

(2019-06-30 14:39:34)
标签:

apache

threadsperchild

maxconnectionsperchi

mpm_winnt

httpd-mpm

分类: 网站优化
1. 异常日志
[mpm_winnt:error] [pid 3448:tid 2000] AH00326: Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting
2. 解决方法
启用MPM模块配置文件,并修改配置。Windows操作系统上默认的MPM模块是mpm_winntmpm_winnt模块是专门针对Windows操作系统而优化设计的MPM模块。它只创建一个单独的子进程,并在这个子进程中轮流产生多个线程来处理请求。
2.1 在httpd.conf中找到MPM配置项,解除注释
Include conf/extra/httpd-mpm.conf
2.2 在httpd-mpm.conf文件中找到mpm_winnt_module下的配置项并按实际需求修改
    ThreadsPerChild        300
    MaxConnectionsPerChild   30000
参数释义:
ThreadsPerChild
这个参数用于设置每个进程的线程数
子进程在启动时建立这些线程后就不再建立新的线程了,一方面因为mpm_winnt不能启动多个进程, 所以这个数值要足够大,以便可以处理可能的请求高峰,另一方面该参数以服务器的响应速度为准的, 数目太大的反而会变慢。因此需要综合均衡一个合理的数值。
mpm_winnt上的默认值是64, 最大值是1920. 
这里建议设置为100-500之间,服务器性能高的话值大一些,反之值小一些。
MaxRequestsPerChild/MaxConnectionsPerChild
该参数表示每个子进程能够处理的最大请求数, 即同时间内子进程数目.设置为零表示不限制, mpm_winnt上的默认值就是0。MaxRequestsPerChild是Apache2.4之前的名称,但意义相同,按官方的说法,旧名称依然支持。
官方参考手册中不建议设置为0, 主要基于两点考虑:
(1) 可以防止(偶然的)内存泄漏无限进行,从而耗尽内存;
(2) 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
这个参数的值更大程度上取决于服务器的内存,如果内存比较大的话可以设置为0或很大的数字,否则设置一个小的数值。需要说明的是,如果这个值设置的太小的话会造成Apache频繁重启,在日志文件中会看到如下的文字:
Process exiting because it reached Process exiting because it reached MaxConnectionsPerChild. Signaling the parent to restart a new child process.
这样一来apache就会重启,降低了Apache的总体性能。

甚至严重时候出现错误日志内容 Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting。这样就会导致重启失败,站点或服务器上的应用无法访问了。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有