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個請求將迅速被處理完畢,效率很高
相關文章
相關標籤/搜索