Apache 2.X 支持插入式并行處理模塊,稱為多路處理模塊(MPM)。在編譯apache時(shí)必須選擇也只能選擇一個(gè)MPM,對(duì)類UNIX系統(tǒng),有幾個(gè)不同的MPM可供選擇,它們會(huì)影響到apache的速度和可伸縮性。
Prefork MPM : 這個(gè)多路處理模塊(MPM)實(shí)現(xiàn)了一個(gè)非線程型的、預(yù)派生的web服務(wù)器,它的工作方式類似于Apache 1.3。它適合于沒有線程安全庫,需要避免線程兼容性問題的系統(tǒng)。它是要求將每個(gè)請(qǐng)求相互獨(dú)立的情況下最好的MPM,這樣若一個(gè)請(qǐng)求出現(xiàn)問題就不會(huì)影響到其他請(qǐng)求。
這個(gè)MPM具有很強(qiáng)的自我調(diào)節(jié)能力,只需要很少的配置指令調(diào)整。最重要的是將MaxClients設(shè)置為一個(gè)足夠大的數(shù)值以處理潛在的請(qǐng)求高峰,同時(shí)又不能太大,以致需要使用的內(nèi)存超出物理內(nèi)存的大小。
Worker MPM : 此多路處理模塊(MPM)使網(wǎng)絡(luò)服務(wù)器支持混合的多線程多進(jìn)程。由于使用線程來處理請(qǐng)求,所以可以處理海量請(qǐng)求,而系統(tǒng)資源的開銷小于基于進(jìn)程的MPM。但是,它也使用了多進(jìn)程,每個(gè)進(jìn)程又有多個(gè)線程,以獲得基于進(jìn)程的MPM的穩(wěn)定性。
每個(gè)進(jìn)程可以擁有的線程數(shù)量是固定的。服務(wù)器會(huì)根據(jù)負(fù)載情況增加或減少進(jìn)程數(shù)量。一個(gè)單獨(dú)的控制進(jìn)程(父進(jìn)程)負(fù)責(zé)子進(jìn)程的建立。每個(gè)子進(jìn)程可以建立ThreadsPerChild數(shù)量的服務(wù)線程和一個(gè)監(jiān)聽線程,該監(jiān)聽線程監(jiān)聽接入請(qǐng)求并將其傳遞給服務(wù)線程處理和應(yīng)答。
不管是Worker模式或是Prefork 模式,Apache總是試圖保持一些備用的(spare)或者是空閑的子進(jìn)程(空閑的服務(wù)線程池)用于迎接即將到來的請(qǐng)求。這樣客戶端就不需要在得到服務(wù)前等候子進(jìn)程的產(chǎn)生。
Event MPM:以上兩種穩(wěn)定的MPM方式在非常繁忙的服務(wù)器應(yīng)用下都有些不足。盡管HTTP的Keepalive方式能減少TCP連接數(shù)量和網(wǎng)絡(luò)負(fù)載,但是 Keepalive需要和服務(wù)進(jìn)程或者線程綁定,這就導(dǎo)致一個(gè)繁忙的服務(wù)器會(huì)耗光所有的線程。 Event MPM是解決這個(gè)問題的一種新模型,它把服務(wù)進(jìn)程從連接中分離出來。在服務(wù)器處理速度很快,同時(shí)具有非常高的點(diǎn)擊率時(shí),可用的線程數(shù)量就是關(guān)鍵的資源限 制,此時(shí)Event MPM方式是最有效的。一個(gè)以Worker MPM方式工作的繁忙服務(wù)器能夠承受每秒好幾萬次的訪問量(例如在大型新聞服務(wù)站點(diǎn)的高峰時(shí)),而Event MPM可以用來處理更高負(fù)載。值得注意的是,Event MPM不能在安全HTTP(HTTPS)訪問下工作。
對(duì)于Event 模式,apache給出了以下警告:
This MPM is experimental, so it may or may not work as expected .
這種MPM目前處于試驗(yàn)狀態(tài),他可能不能按照預(yù)期的那樣工作。
如何配置三種MPM
新聞熱點(diǎn)
疑難解答
圖片精選