刘泉皓

没有最强的法术,只有最强的法师。

Apache优化:修改最大并发连接数

02 Apr 2016 » memory

一般情况下,默认apache配置文件不可用于生产环境,需要自己根据实际情况调整参数编译最佳状态。

Apache的核心模块叫做多路模块处理(Multi-Processing Mudule,简称MPM) 各个系统有不同的模块,windows使用mpm_winnt,linux用mpm_prefork或mpm_worker。当编译时没有指定mpm模块是,windows默认用mpm_winn,linux默认用mpm_perfork。

1.查看apache使用的何种模块使用命令:

httpd -l

mpm的配置文件在apache安装目录/conf/extra/httpd-mpm.conf。 默认apache没有启用mpm,httpd.conf需添加Include conf/extra/httpd-mpm.conf

mpm_winnt:单进程多线程。 mpm_perfork:多进程。 mpm_worker:多进程多线程。

MPM调优(修改conf/extra/httpd-mpm.conf):

<IfModule mpm_winnt_module>
#每个子进程的最大并发线程数
ThreadPerChild    150 #推荐配置:小型网站=1000 中型网站=1000~2000 大型网站=2000~3000
#每个子进程允许处理的请求数。累计处理请求数超过该值,该子进程会结束(然后根据需要确定是否创建新的子进程。0表示无限制,设置非零防止内存无限泄漏,同时给进程一个寿命,当服务器负载减轻时活动的进程数减少。
MaxRequestPerChild 0 #推荐配置: 小=10000 中或大=20000~100000
</IfModule>

<IfModule mpm_perfork_module>
#启动apache时创建的子进程数
StartServers    5 # 小=默认 中=20~50 大=50~100
#空闲状态最小子进程数
MinSpareServers    5 # 与StartServers保持一致
#空闲状态最大子进程数
MaxSpareServers    10 # 小=20 中=30~80 大=80~120
#允许同时连接的最大子进程数
MaxClients    150 # 小=500 中=500~1500 大=1500~3000
MaxRequestsPerChild 0 # 小=10000 中或大=10000~500000
(此外还需要设置ServerLimit,最好于MaxClients保持一致)
</IfModule>

<IfModule mpm_worker_module>
StartServers    2 #小=默认 中=3~5 大=5~10
MaxClients    150 #小=500 中=500~1500 大=1500~3000
#空闲状态最小线程数
MinSpareThreads    25 #小=默认 中=50~100 大=100~200
#空闲状态最大线程数
MaxSpareThreads    75 #小=默认 中=80~160 大=200~400
ThreadsPerChild    25 #小=默认 中=50~100 大=100~200
MaxRequestsPerChild 0 #小=10000 中或大=10000~500000
(此外如果MaxChilds/ThreadsPerChild大于16ServerLimit必须大于它们的值)
</IfModule>

ServerLimit表示apache允许创建的最大进程数,apache编译时内部一个硬限制ServerLimit 20000(mpm_perfork为ServerLimit 200000),如果它设置太高,会有过多的共享内存被分配,如果超过了系统能处理的能力,apache可能无法启动,会系统变得不稳定。


知识共享许可协议    鄂ICP备 15002452号-5    鄂公网安备 42088102000048号