• MPM


    1.查看当前模式 httpd -l

    C:wampinapacheApache2.2.17in>httpd -l
    Compiled in modules:
      core.c
      mod_win32.c
      mpm_winnt.c
      http_core.c
      mod_so.c
    

     2.修改apache/conf/extra/httpd-mpm.conf

    linux下一般用 prefork模式

    <IfModule mpm_prefork_module>
        StartServers          5    //预先启动进程
        MinSpareServers       5    //最小空闲进程
        MaxSpareServers      10    //最大空闲进程
        MaxClients          150    //最大并发量
        MaxRequestsPerChild   0    //每个进程在处理了多少次请求之后自动销毁
    </IfModule>
    

    当Apache被启动时,Apache会自动创建StartServers个进程,并且尽力将空闲进程数保持在MinSpareServers和MaxSpareServers之间。
    如果空闲进程小于MinSpareServers,Apache将会以大约每秒1个的速度新建进程。
    如果空闲进程大于MaxSpareServers,Apache将会删除多余的空闲进程,释放服务器资源。
    进程数的最大值由MaxClients控制,在Apache1.3中最大只能设置为256,但在Apache2.0中,可以通过在配置开头增加ServerLimit项目来突破256的限制,此时必须MaxClients ≤ ServerLimit ≤ 20000
    MaxRequestsPerChild用来控制每个进程在处理了多少次请求之后自动销毁,这个参数可以设置为0表示无限(即不销毁进程),在HTTPD占用内存过大的时候可以设置为50、100来及时销毁,防止内存泄露。

    3.推荐配置,对大部分中型网站

    <IfModule mpm_prefork_module>
        StartServers          5
        MinSpareServers       5
        MaxSpareServers      10
        ServerLimit         1500
        MaxClients          1000
        MaxRequestsPerChild   0
    </IfModule>
    

     4.计算MaxClients
    连接数理论上当然是支持越大越好,但要在服务器的能力范围内,这跟服务器的CPU、内存、带宽等都有关系。
    1)最大client联接数的算法
    查看当前的连接数可以用:

    ps aux | grep httpd | wc -l
    

     或:

    pgrep httpd|wc -l
    

     或 实时检测HTTPD连接数

    watch -n 1 -d “pgrep httpd|wc -l”
    

    2) 计算httpd占用内存的平均数(K):

    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,可能会因内存泄露导致服务器崩溃)

  • 相关阅读:
    20135203齐岳 信息安全系统设计基础第二周学习总结
    信息安全系统设计基础第一周学习总结
    实验五 cmp传输与加解密
    实验三 敏捷开发与XP实践(改)
    Anaconda添加镜像和删除镜像
    srvany.exe和instsrv.exe打包exe为windows服务趟的坑
    python笔记
    haproxy实现socket5代理
    nginx实现的一些实用性配置,持续更新中
    利用Func封装“方法重试”功能
  • 原文地址:https://www.cnblogs.com/fenle/p/4470266.html
Copyright © 2020-2023  润新知