為了更充分合理地利用Apache服務(wù)器,我們都應(yīng)該根據(jù)自己的實際需要對Apache的默認配置作出一些必要的調(diào)整。而針對Apache的優(yōu)化配置過程中,修改Apache的最大并發(fā)連接數(shù)就顯得尤為重要。
操作系統(tǒng)
MPM模塊
描述
Windows
mpm_winnt
例如:windows2008 R2系統(tǒng)下使用Apache為中間件時候
Unix/Linux
mpm_prefork
BeOS
mpm_beos
由Be公司開發(fā)的一種多媒體操作系統(tǒng),官方版已停止更新。
Netware
mpm_netware
由NOVELL公司推出的一種網(wǎng)絡(luò)操作系統(tǒng)
OS/2
mpmt_os2
一種最初由微軟和IBM共同開發(fā)的操作系統(tǒng),現(xiàn)由IBM單獨開發(fā)(微軟放棄OS/2,轉(zhuǎn)而開發(fā)Windows)
1 :如果不確定具體的模式也可以首先查看apache的運行模式,查看命令:httpd -l
Compiled in modules:core.c
mod_win32.c
mpm_winnt.c
http_core.c
mod_so.c
這里可以看到運行模式是winnt模式。
2:修改apache 的httpd-mpm.conf 配置
打開 apache2/conf/extra/httpd-mpm.conf ,每個機器可能httpd-mpm.conf 可能不同,這里可以通過find 命令查詢。
3:以mpm_winnt模塊為例說明,mpm_winnt模是專門針對Windows操作系統(tǒng)而優(yōu)化設(shè)計的MPM模塊。它只創(chuàng)建一個單獨的子進程,并在這個子進程中輪流產(chǎn)生多個線程來處理請求。
對于Windows系統(tǒng),默認會使用mpm_winnt,即:
ThreadsPerChild 150
MaxRequestsPerChild 0
建議的設(shè)置:
ThreadsPerChild 500
MaxRequestsPerChild 100000
詳細補充說明:
ThreadsPerChild
這個參數(shù)用于設(shè)置每個進程的線程數(shù)
子進程在啟動時建立這些線程后就不再建立新的線程了,一方面因為mpm_winnt不能啟動多個進程, 所以這個數(shù)值要足夠大,以便可以處理可能的請求高峰,另一方面該參數(shù)以服務(wù)器的響應(yīng)速度為準(zhǔn)的, 數(shù)目太大的反而會變慢。因此需要綜合均衡一個合理的數(shù)值。
mpm_winnt上的默認值是64, 最大值是1920.
這里建議設(shè)置為100-500之間,服務(wù)器性能高的話值大一些,反之值小一些。
MaxRequestsPerChild
該參數(shù)表示每個子進程能夠處理的最大請求數(shù),
即同時間內(nèi)子進程數(shù)目.設(shè)置為零表示不限制, mpm_winnt上的默認值就是0.
官方參考手冊中不建議設(shè)置為0, 主要基于兩點考慮:
(1)
可以防止(偶然的)內(nèi)存泄漏無限進行,從而耗盡內(nèi)存;
(2)
給進程一個有限壽命,從而有助于當(dāng)服務(wù)器負載減輕的時候減少活動進程的數(shù)量。
這個參數(shù)的值更大程度上取決于服務(wù)器的內(nèi)存,如果內(nèi)存比較大的話可以設(shè)置為0或很大的數(shù)字,否則設(shè)置一個小的數(shù)值。需要說明的是,如果這個值設(shè)置的太小的話會造成Apache頻繁重啟,在日志文件中會看到如下的文字:
Process exiting because it reached Process exiting because it reached MaxConnectionsPerChild. Signaling the parent to restart a new child process.
這樣一來apache就會重啟,降低了Apache的總體性能。
甚至嚴重時候出現(xiàn)錯誤日志內(nèi)容 Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting。這樣就會導(dǎo)致重啟失敗,站點或服務(wù)器上的應(yīng)用無法訪問了。