• okass 在版块 Coding 中回复了话题 Apache2 相关优化专题 2年, 7个月前

    2. worker模式

     

    Worker MPM支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程可以建立ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。

     

    <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~50000
    (此外,如果MaxClients/ThreadsPerChild大于16,还需额外设置ServerLimit参数,ServerLimit必须大于等于 MaxClients/ThreadsPerChild 的值。)
    </IfModule>

     

    StartServers       3    //apache已启动马上创建3个httpd进程(ps aux可以看到)
    MaxClients       2000 //同一时间最大接受2000个请求(其实就是2000个线程)
    ServerLimit       25    //apache最大能启动25个进程。
    MinSpareThreads    50    //apache至少要有50个空闲线程,用来等待接下来的请求,不满则由进程创建线程
    MaxSpareThreads    200   //apache最多能有200个线程,超出了200个线程,则杀死多余的线程
    ThreadLimit       200   //限制一个进程最多只能创建200个线程
    ThreadsPerChild     100   //设定一个进程固定创建100个线程
    MaxRequestsPerChild  10000 //设定当一个进程一共接受过10000此请求之后被杀死。以释放内存。

     

    将apache设为worker模式是需要在编译apache时配置参数

    监控当前apache线程总数: watch -n 1 -d “pgrep apache|wc -l”

    计算当前apahce平均内存占用大小 ps aux|grep -v grep|awk ‘/apache2/{sum+=$6;n++};END{print sum/n}'(注意:可通过调整$6,$4,$3查看内存CPU使用百分比,或修改输出公式为num,查看总量)

    自带测试工具 ab -n 1000 -c 10 127.0.0.1/index.php

WirelessLink
Logo