Apache默認(rèn)的Prefork 和Worker 兩種工作模式有什么區(qū)別
文章目錄
Apache WEB 服務(wù)器詳解
Apache WEB 服務(wù)器軟件簡介
Prefork 的工作原理
Worker 的工作原理
Apache WEB 服務(wù)器詳解
Apache WEB 服務(wù)器軟件簡介
Apache HTTP Server是Apache軟件基金會的一個開源的網(wǎng)頁服務(wù)器,是世界使用排名第一的Web服務(wù)器軟件,可以運行在幾乎所有廣泛使用的計算機平臺上,由于其跨平臺和安全性被廣泛使用,是目前最流行的Web服務(wù)器端軟件之一。
Apache服務(wù)器是一個多模塊化的服務(wù)器,經(jīng)過多次修改,成為目前世界使用排名第一的Web服務(wù)器軟件。Apache取自“A Patchy Server”的讀音,即充滿補丁的服務(wù)器,因為Apache基于GPL發(fā)布,大量開發(fā)者不斷為Apache貢獻(xiàn)新的代碼、功能、新的特性、修改原來的缺陷。
Apache服務(wù)器的特點是使用簡單、速度快、性能穩(wěn)定,可以做負(fù)載均衡及代理服務(wù)器來使用。
Prefork 的工作原理
如果不用“——with-mpm”顯式指定某種MPM,prefork就是Unix平臺上缺省的MPM.它所采用的預(yù)派生子進(jìn)程方式也是Apache1.3中采用的模式.prefork本身并沒有使用到線程,2.0版使用它是為了與1.3版保持兼容性;另一方面,prefork用單獨的子進(jìn)程來處理不同的請求,進(jìn)程之間是彼此獨立的,這也使其成為最穩(wěn)定的MPM之一.
prefork的工作原理是,控制進(jìn)程在最初建立“StartServers”個子進(jìn)程后,為了滿足MinSpareServers設(shè)置的需要創(chuàng)建一個進(jìn)程,等待一秒鐘,繼續(xù)創(chuàng)建兩個,再等待一秒鐘,繼續(xù)創(chuàng)建四個……如此按指數(shù)級增加創(chuàng)建的進(jìn)程數(shù),最多達(dá)到每秒32個,直到滿足MinSpareServers設(shè)置的值為止.這就是預(yù)派生(prefork)的由來.這種模式可以不必在請求到來時再產(chǎn)生新的進(jìn)程,從而減小了系統(tǒng)開銷以增加性能.
Worker 的工作原理
相對于prefork,worker是2.0版中全新的支持多線程和多進(jìn)程混合模型的MPM.由于使用線程來處理,所以可以處理相對海量的請求,而系統(tǒng)資源的開銷要小于基于進(jìn)程的服務(wù)器.但是,worker也使用了多進(jìn)程,每個進(jìn)程又生成多個線程,以獲得基于進(jìn)程服務(wù)器的穩(wěn)定性.這種MPM的工作方式將是Apache2.0的發(fā)展趨勢.
worker的工作原理是,由主控制進(jìn)程生成“StartServers”個子進(jìn)程,每個子進(jìn)程中包含固定的ThreadsPerChild線程數(shù),各個線程獨立地處理請求.同樣,為了不在請求到來時再生成線程,MinSpareThreads和MaxSpareThreads設(shè)置了最少和最多的空閑線程數(shù);而MaxClients設(shè)置了所有子進(jìn)程中的線程總數(shù).如果現(xiàn)有子進(jìn)程中的線程總數(shù)不能滿足負(fù)載,控制進(jìn)程將派生新的子進(jìn)程.
Worker模式下所能同時處理的請求總數(shù)是由子進(jìn)程總數(shù)乘以ThreadsPerChild值決定的,應(yīng)該大于等于MaxClients.如果負(fù)載很大,現(xiàn)有的子進(jìn)程數(shù)不能滿足時,控制進(jìn)程會派生新的子進(jìn)程.默認(rèn)最大的子進(jìn)程總數(shù)是16,加大時也需要顯式聲明ServerLimit(最大值是20000)
需要注意的是,如果顯式聲明了ServerLimit,那么它乘以ThreadsPerChild的值必須大于等于MaxClients,而且MaxClients必須是ThreadsPerChild的整數(shù)倍,否則Apache將會自動調(diào)節(jié)到一個相應(yīng)值(可能是個非期望值).
在大多數(shù)平臺上,Prefork MPM在效率上要比Worker MPM要高,但是內(nèi)存使用大得多。prefork的無線程設(shè)計在某些情況下將比worker更有優(yōu)勢:它可以使用那些沒有處理好線程安全的第三方模塊,并且對于那些線程調(diào)試?yán)щy的平臺而言,它也更容易調(diào)試一些。
Worker模式:Worker MPM 使用多個子進(jìn)程,每個子進(jìn)程有多個線程。每個線程在某個確定的時間只能維持一個連接。通常來說,在一個高流量的HTTP服務(wù)器上,Worker MPM是個比較好的選擇,因為Worker MPM的內(nèi)存使用比Prefork MPM要低得多。
Worker MPM也由不完善的地方,如果一個線程崩潰,整個進(jìn)程就會連同其所有線程一起"死掉".由于線程共享內(nèi)存空間,所以一個程序在運行時必須被系統(tǒng)識別為"每個線程都是安全的"。
Apache 任務(wù)調(diào)度
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。