标签: apache参数

  • 合理设置apache参数

    在/usr/local/etc/apache22/httpd.conf中加载MPM配置(去掉前面的注释):

    # 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.要加到多少?

    连接数理论上当然是支持越大越好,但要在服务器的能力范围内,这跟服务器的CPU、内存、带宽等都有关系。

    查看当前的连接数可以用:

    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。

    服务器内存有2G,除去常规启动的服务大约需要500M(保守估计),还剩1.5G可用,那么理论上可以支持1.5*1024*1024*1024/200000 = 8053.06368

    约8K个进程,支持2W人同时访问应该是没有问题的(能保证其中8K的人访问很快,其他的可能需要等待1、2秒才能连上,而一旦连上就会很流畅)

    控制最大连接数的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的设值后不再增加,但此时访问网站也很流畅,那就不用贪心再设置更高的值了,不然以后如果网站访问突增不小心就会耗光服务器内存,可根据以后访问压力趋势及内存的占用变化再逐渐调整,直到找到一个最优的设置值。

    (MaxRequestsPerChild不能设置为0,可能会因内存泄露导致服务器崩溃)

    更佳最大值计算的公式:

    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