Apache优化:修改最大并发连接数
一般情况下,默认apache配置文件不可用于生产环境,需要自己根据实际情况调整参数编译最佳状态。
Apache的核心模块叫做多路模块处理(Multi-Processing Mudule,简称MPM)
各个系统有不同的模块,windows使用mpm_winnt,linux用mpm_prefork或mpm_worker。
当编译时没有指定mpm模块是,windows默认用mpm_winnt,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大于16,ServerLimit必须大于它们的值) </IfModule>
ServerLimit表示apache允许创建的最大进程数,apache编译时内部一个硬限制ServerLimit 20000(mpm_perfork为ServerLimit 200000),如果它设置太高,会有过多的共享内存被分配,如果超过了系统能处理的能力,apache可能无法启动,会系统变得不稳定。