在apache中设置httpd最大连接数的方法,当网站在线人数增多,网站连接数持续增长时,可以在硬件资源满足的情况下,增大apache httpd的最大连接数加以改善,本文提供了具体方法。
问题描述:
解决方法:
1、在哪设置?
复制代码代码示例:
# Server-pool management (MPM specific)
Include etc/apache22/extra/httpd-mpm.conf 可见的MPM配置在/usr/local/etc/apache22/extra/httpd-mpm.conf,但根据httpd的工作模式分了很多块,哪一部才是当前httpd的工作模式呢?
可通过执行 apachectl -l 来查看:
Compiled in modules:
core.c prefork.c http_core.c mod_so.c
看到prefork 字眼,因此可见当前httpd应该是工作在prefork模式,prefork模式的默认配置是:
<IfModule mpm_prefork_module>
StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule>
2,最大连接数调整为多少合适 ?
查看当前的连接数:
ps aux | grep httpd | wc -l
或: pgrep httpd|wc -l
计算httpd占用内存的平均数:
ps aux|grep -v grep|awk '/httpd/{sum+=$6;n++};END{print sum/n}'
由于基本都是静态页面,CPU消耗很低,每进程占用内存也不算多,大约200K。
控制最大连接数的MaxClients ,因此可以尝试配置为:
<IfModule mpm_prefork_module>
StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 5500 MaxClients 5000 MaxRequestsPerChild 100 </IfModule> 注意,MaxClients默认最大为250,若要超过这个值就要显式设置ServerLimit,且ServerLimit要放在MaxClients之前,值要不小于MaxClients,不然重启httpd时会有提示。
重启httpd后,通过反复执行pgrep httpd|wc -l 来观察连接数,可以看到连接数在达到MaxClients的设值后不再增加,但此时访问网站也很流畅,那就不用贪心再设置更高的值了,不然以后如果网站访问突增不小心就会耗光服务器内存,可根据以后访问压力趋势及内存的占用变化再逐渐调整,直到找到一个最优的设置值。
更佳最大值计算的公式:
apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
apache_max_process = apache_max_process_with_good_perfermance * 1.5
watch -n 1 -d "pgrep httpd|wc -l"
(责任编辑:IT) |