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