apache中mpm分析

一、什麼是MPM?
Multi-Processing Module (MPM) implements a hybrid multi-process multi-threaded server。(多進程、多線程)linux

二、有多少種MPM?
大體有:prefork MPM、worker MPM、BeOS MPM、NetWare MPM、OS/2 MPM、WinNT MPM。   apache

三、怎麼知道apache當前用的是哪一個MPM?
linux及windows下均可以使用命令:「httpd -l 」 進行查詢。windows

四、各個MPM是怎麼工做及如何優化?
(1)prefork MPM
         <IfModule mpm_prefork_module>
             StartServers                 10
             MinSpareServers         10
             MaxSpareServers         15
             ServerLimit                   2000
             MaxClients                    1000
             MaxRequestsPerChild 10000
         </IfModule>
         啓動時創建StartServers個子進程,
         而後按每秒建立指數級個進程直到達到MinSpareServers個進程(最多增到每秒32個),
         若是空閒進程數大於MaxSpareServers,則檢查kill掉一些空閒進程。
         MaxRequestPerChild指定每一個進程處理了多少個請求後就自我毀滅。
         MaxClients指定apache最多能夠同時處理的請求數,也就是進程數?
         MaxClients默認不能大於256,能夠經過設定ServerLimit來增大這個限制數,最大20000?多線程

(2)worker:
         <IfModule mpm_worker_module>
             StartServers                   3
             MaxClients                      2000
             ServerLimit                     25
             ThreadLimit                    200
             ThreadsPerChild            100
             MinSpareThreads          50
             MaxSpareThreads         200
             MaxRequestsPerChild    0
         </IfModule>
         啓動時創建StartServers個子進程,
         每一個進程包含ThreadsPerChild個線程,缺省最大64
         MinSpareThreads定義最小的空閒線程數,最大75
         MaxSpareThreads定義最大的空閒線程數,超過則執行清理?最大250
         MaxClients定義全部子進程中的線程總數
         ThreadLimit,最大20000,默認64
         ServerLimit,最大值20000,默認16
          須要注意的是,若是顯式聲明瞭ServerLimit,那麼它乘以ThreadsPerChild的值必須大於等於MaxClients,並且 MaxClients必須是ThreadsPerChild的整數倍,不然Apache將會自動調節到一個相應值(多是個非指望值)。ide

(3)WinNT MPM:
         <IfModule mpm_winnt_module>
             ThreadsPerChild          500
             MaxRequestsPerChild 10000
         </IfModule>
         mpm_winnt.c是專門針對Windows   NT優化的MPM(多路處理模塊),它使用一個單獨的父進程產生一個單獨的子進程,在這個子進程中輪流產生多個線程來處理請求。也就是說 mpm_winnt只能啓動父子兩個進程, 不能像Linux下那樣同時啓動多個進程。
ThreadLimit,默認1920,最大15000,限制單個進程的線程總數。優化

相關文章
相關標籤/搜索