设为首页 收藏本站
查看: 1228|回复: 0

[经验分享] Apache优化:修改最大并发连接数(ThreadsPerChild的值)

[复制链接]

尚未签到

发表于 2017-12-25 14:19:15 | 显示全部楼层 |阅读模式
  Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting.
  当Apache的安装目录/logs下的error-2017-06-28.log文件中,出现以上日志说明时,说明Apache需要进行优化了,修改Apache的最大并发连接数。
  Apache是一个跨平台的web服务器,由于其简单高效、稳定安全的特性,被广泛应用于计算机技术的各个领域。现在,Apache凭借其庞大的用户数,已成为用户数排名第一的web服务器。
  众所周知,Apache是一个跨平台的、采用模块化设计的服务器。为了应对不同的平台和不同的环境产生的各种不同的需求,也为了在具体的平台或环境下达到最佳的效果,Apache在web服务器的基础功能方面(端口绑定、接收请求等)也同样采用了模块化设计,这个Apache的核心模块就叫做多路处理模块(Multi-Processing Module,简称MPM)。
  Apache针对不同的操作系统提供了多个不同的MPM模块,例如:mpm_beos、mpm_event、mpm_netware、mpmt_os2、mpm_prefork、mpm_winnt、mpm_worker。如果条件允许,我们可以根据实际需求将指定的MPM模块编译进我们自己的Apache中(Apache的源码是开放的,允许用户自行编译)。不过,如果在编译时我们没有选择,Apache将按照如下表格根据不同的操作系统自行选择对应的MPM模块,这也是Apache针对不同平台推荐使用的MPM模块。

不同操作系统上默认的MPM模块操作系统MPM模块描述Windows
mpm_winnt
不用介绍了吧:)
Unix/Linux
mpm_prefork
不用介绍了吧:)
BeOS
mpm_beos
由Be公司开发的一种多媒体操作系统,官方版已停止更新。
Netware
mpm_netware
由NOVELL公司推出的一种网络操作系统
OS/2
mpmt_os2
一种最初由微软和IBM共同开发的操作系统,现由IBM单独开发(微软放弃OS/2,转而开发Windows)
mpm_winnt模块
  mpm_winnt模块是专门针对Windows操作系统而优化设计的MPM模块。它只创建一个单独的子进程,并在这个子进程中轮流产生多个线程来处理请求。

修改MPM模块配置(方法一)
  在对Apache的MPM模块具备一定了解后,我们就可以针对不同的MPM模块来修改Apache最大并发连接数配置了。
  1.启用MPM模块配置文件
  在Apace安装目录/conf/extra目录中有一个名为httpd-mpm.conf的配置文件。该文件主要用于进行MPM模块的相关配置。不过,在默认情况下,Apache的MPM模块配置文件并没有启用。因此,我们需要在httpd.conf文件中启用该配置文件,如下所示:
  

# Server-pool management (MPM specific)  
Include conf/extra/httpd-mpm.conf (去掉该行前面的注释符号"#")
  

  2.修改MPM模块配置文件中的相关配置
  在启动MPM模块配置文件后,我们就可以使用文本编辑器打开该配置文件,我们可以看到,在该配置文件中有许多<IfModule>配置节点,如下图所示:
  只有Apache使用对应MPM模块时,对应配置才会生效
  此时,我们就需要根据当前Apache服务器所使用的MPM模块,来修改对应<IfModule>节点下的参数配置。首先,我们来看看mpm_winnt模块下的默认配置:
  

#由于mpm_winnt模块只会创建1个子进程,因此这里对单个子进程的参数设置就相当于对整个Apache的参数设置。  

  
<IfModule mpm_winnt_module>
  
ThreadsPerChild      150 #推荐设置:小型网站=1000 中型网站=1000~2000 大型网站=2000~3500
  
MaxRequestsPerChild    0 #推荐设置:小=10000 中或大=20000~100000
  
</IfModule>
  

  对应的配置参数作用如下:

ThreadsPerChild每个子进程的最大并发线程数。MaxRequestsPerChild每个子进程允许处理的请求总数。如果累计处理的请求数超过该值,该子进程将会结束(然后根据需要确定是否创建新的子进程),该值设为0表示不限制请求总数(子进程永不结束)。  该参数建议设为非零的值,可以带来以下两个好处:


  • 可以防止程序中可能存在的内存泄漏无限进行下去,从而耗尽内存。
  • 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
修改MPM模块配置(方法二)
  直接在Apace安装目录/conf/httpd.conf 文件中,最下面加上
  <IfModule mpm_winnt_module>
  ThreadsPerChild 512
  MaxRequestsPerChild 0
  </IfModule>  
  也可。
  注意:在配置相关参数时,请先保证服务器具备足够的硬件性能(例如:CPU、内存等)。 如果发现自启动后,随着服务器的运行时间增加,服务器的内存占用也随之增加,可能是程序中出现内存泄露,请向下调整参数MaxRequestsPerChild的值以降低内存泄露带来的影响,然后尽快找出程序中的问题之所在。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-427869-1-1.html 上篇帖子: linux下设置mysql apache 开机后自动启动 下篇帖子: Apache HTTPserver安装后报:无法启动,由于应用程序的并行配置不对-(已解决)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表