apache配置mpm_worker

             apache配置mpm_worker(多道处理模块)
worker的工做原理及配置
worker是2.0 版中全新的支持多线程和多进程混合模型的MPM。因为使用线程来处理,因此能够处理相对海量的请求,而系统资源的开销要小于基于进程的服务器,worker也使用了多进程,每一个进程又生成多个线程,以得到基于进程服务器的稳定性
configure -with-mpm=worker && make && make install(不指定worker,默认linux/unix采用的是prefork)
配置:
<IfModule mpm_worker_module>
 #   StartServers          2 //初始化创建的进程数
 #   MaxClients          150 //全部子进程中的线程总数
 #   MinSpareThreads      25 //最少空闲线程数(为了避免在请求到来时再生成线程)
 #   MaxSpareThreads      75 //最大空闲线程数
 #   ThreadsPerChild      25 //每一个子进程数包含的线程数
 #   MaxRequestsPerChild   0 //控制服务器创建新进程和结束旧进程的频率
     StartServers        60
     MaxClients        3200
     ServerLimit        100
     MinSpareThreads   1920
     MaxSpareThreads   3200
    #ThreadLimit        512
     ThreadsPerChild     32
     MaxRequestsPerChild  300
</IfModule>
公式:活动子进程的最大数量=MaxClients/ThreadsPerChild
      MaxChients=ThreadsPerChild的整数倍
      ServerLimit(活动子进程数量的硬限制)>= 活动子进程的最大数量
      ThreadLimit(全部服务线程总数的硬限制)>=ThreadsPerChild      
      ServerLimit*ThreadsPerChild >= MaxClient
注意:ServerLimit,ThreadLimit必须放在前列
worker的工做原理是,由主控制进程生成“StartServers”个子进程,每一个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。一样,为了避免在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了全部子进程中的线程总数。若是现有子进程中的线程总数不能知足负载,控制进程将派生新的子进程。 
MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和 250。这两个参数对Apache的性能影响并不大,能够按照实际状况相应调节。
ThreadsPerChild是worker MPM中与性能相关最密切的指令。 ThreadsPerChild的最大缺省值是64,若是负载较大,64也是不够的。这时要显式使用ThreadLimit指令,它的最大缺省值是 20000。
Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild 值决定的,应该大于等于MaxClients。若是负载很大,现有的子进程数不能知足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也须要显式声明ServerLimit(最大值是20000)。
须要注意的是,若是显式声明了ServerLimit,那么它乘以 ThreadsPerChild的值必须大于等于MaxClients,并且MaxClients必须是ThreadsPerChild的整数倍,不然 Apache将会自动调节到一个相应值(多是个非指望值)。
实验:
ServerLimit没写就是16,它决定系统最多启动几个httpd进程。
ThreadLimit 没写默认是64,
ThreadsPerChild* ServerLimit=25*16=400,
400就是系统理论支持的最大并发。
MaxClients<ThreadsPerChild* ServerLimit,
MaxClients若是大于400将被限制在400.
400只是理论最大并发,实际并发就是MaxClients的值。
我作了以下试验:
第一次,ab -n 10000 -c 5000 http://192.168.1.101/
Time taken for tests:   127.952487 seconds
Requests per second:    78.15 [#/sec] (mean)
Time per request:       63976.242 [ms] (mean)
Time per request:       12.795 [ms] (mean, across all concurrent requests)
Transfer rate:          22.89 [Kbytes/sec] received
第二次,ab -n 10000 -c 400 http://192.168.1.101/
Time taken for tests:   138.340074 seconds
Requests per second:    72.29 [#/sec] (mean)
Time per request:       5533.603 [ms] (mean)
Time per request:       13.834 [ms] (mean, across all concurrent requests)
Transfer rate:          21.17 [Kbytes/sec] received
第三次,ab -n 10000 -c 150 http://192.168.1.101/
Time taken for tests:   6.727553 seconds
Requests per second:    1486.42 [#/sec] (mean)
Time per request:       100.913 [ms] (mean)
Time per request:       0.673 [ms] (mean, across all concurrent requests)
Transfer rate:          435.37 [Kbytes/sec] received
前提:访问apache的静态页面,本机。 结论是:并发若是大于MaxClients,服务器的效率会很低,若是并发等于小于MaxClients,10000个请求将迅速被处理完毕,效率很高
相关文章
相关标签/搜索