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