一般情況下,默認apache配置文件不可用於生產環境,需要自己根據實際情況調整參數編譯最佳狀態。
Apache的核心模塊叫做多路模塊處理(Multi-Processing Mudule,簡稱MPM)
各個系統有不同的模塊,windows使用mpm_winnt,linux用mpm_prefork或mpm_worker。
當編譯時沒有指定mpm模塊是,windows默認用mpm_winnt,linux默認用mpm_perfork。
1.查看apache使用的何種模塊使用命令:
$ httpd -l
mpm的配置文件在apache安裝目錄/conf/extra/httpd-mpm.conf。
默認apache沒有啟用mpm,httpd.conf需添加“Include conf/extra/httpd-mpm.conf”。
mpm_winnt:單進程多線程。
mpm_perfork:多進程。
mpm_worker:多進程多線程。
MPM調優(修改conf/extra/httpd-mpm.conf):
<IfModule mpm_winnt_module> #每個子進程的最大並發線程數 ThreadPerChild 150 #推薦配置:小型網站=1000 中型網站=1000~2000 大型網站=2000~3000 #每個子進程允許處理的請求數。累計處理請求數超過該值,該子進程會結束(然后根據需要確定是否創建新的子進程。0表示無限制,設置非零防止內存無限泄漏,同時給進程一個壽命,當服務器負載減輕時活動的進程數減少。 MaxRequestPerChild 0 #推薦配置: 小=10000 中或大=20000~100000 </IfModule> <IfModule mpm_perfork_module> #啟動apache時創建的子進程數 StartServers 5 # 小=默認 中=20~50 大=50~100 #空閑狀態最小子進程數 MinSpareServers 5 # 與StartServers保持一致 #空閑狀態最大子進程數 MaxSpareServers 10 # 小=20 中=30~80 大=80~120 #允許同時連接的最大子進程數 MaxClients 150 # 小=500 中=500~1500 大=1500~3000 MaxRequestsPerChild 0 # 小=10000 中或大=10000~500000 (此外還需要設置ServerLimit,最好於MaxClients保持一致) </IfModule> <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~500000 (此外如果MaxChilds/ThreadsPerChild大於16,ServerLimit必須大於它們的值) </IfModule>
ServerLimit表示apache允許創建的最大進程數,apache編譯時內部一個硬限制ServerLimit 20000(mpm_perfork為ServerLimit 200000),如果它設置太高,會有過多的共享內存被分配,如果超過了系統能處理的能力,apache可能無法啟動,會系統變得不穩定。