深入理解apahce的工作模式perfork、worker
更新時間:2013年06月12日 22:44:24 作者:
本文介紹下,apache的兩種工作模式perfork與worker,就它們的區(qū)別進行深入分析,供大家學(xué)習(xí)參考
prefork模式使用多個子進程,每個子進程只有一個線程。每個進程在某個確定的時間只能維持一個連接。在大多數(shù)平臺上,Prefork MPM在效率上要比Worker MPM要高,但是內(nèi)存使用大得多。prefork的無線程設(shè)計在某些情況下將比worker更有優(yōu)勢:它可以使用那些沒有處理好線程安全的第三方模塊,并 且對于那些線程調(diào)試困難的平臺而言,它也更容易調(diào)試一些。
worker模式使用多個子進程,每個子進程有多個線程。每個線程在某個確定的時間只能維持一個連接。通常來說,在一個高流量的HTTP服務(wù)器 上,Worker MPM是個比較好的選擇,因為Worker MPM的內(nèi)存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一個線程崩潰,整個進程就會連同其所有線程一起”死掉”.由于線程共享內(nèi)存空間,所以一個程序在運行時必須被系統(tǒng)識別為”每 個線程都是安全的”。
prefork方式速度要稍高于worker,然而它需要的cpu和memory資源也稍多于woker。
查看現(xiàn)使用的工作模式:
apachectl -l
兩種模式配置文件+說明:
perfork模式:
<IfModule mpm_prefork_module>
ServerLimit 2000
#連接數(shù)大于256需設(shè)置此項。20000是ServerLimit這個參數(shù)的最大值
StartServers 5
#初始化時建立的子進程數(shù)。prefork默認為5
MinSpareServers 10
#最小的空閑進程數(shù)
MaxSpareServers 15
#最大的空閑進程數(shù)
MaxClients 1000
#最大并發(fā)客戶端連接數(shù)上限
MaxRequestsPerChild 10000
#控制服務(wù)器殺死舊進程產(chǎn)生新進程的頻率
#將MaxRequestsPerChild設(shè)置成非零值有兩個好處:
#1.可以防止(偶然的)內(nèi)存泄漏無限進行,從而耗盡內(nèi)存。
#2.給進程一個有限壽命,從而有助于當服務(wù)器負載減輕的時候減少活動進程的數(shù)量。
</IfModule>
worker模式:
<IfModule mpm_worker_module>
StartServers 3
#初始化時建立的子進程數(shù)
MaxClients 2000
#最大并行處理數(shù)量。子進程最大數(shù)量=MaxClients/ThreadsPerChild
ServerLimit 25
#只有在你需要將MaxClients和ThreadsPerChild設(shè)置成需要超過默認值16個子進程的時候才需要使用這個指令。不要將該指令的值設(shè)置的比MaxClients 和ThreadsPerChild需要的子進程數(shù)量高。
MinSpareThreads 50
#最少空線程數(shù)
MaxSpareThreads 200
#最大空閑線程數(shù)
ThreadLimit 200
#這個指令設(shè)置了每個子進程可配置的線程數(shù)ThreadsPerChild上限,該指令的值應(yīng)當和ThreadsPerChild可能達到的最大值保持一致。
ThreadsPerChild 100
#子進程建立的服務(wù)線程數(shù)
MaxRequestsPerChild 0
#設(shè)置每個子進程在其生存期內(nèi)允許伺服的最大請求數(shù)量。到達MaxRequestsPerChild的限制后,子進程將會結(jié)束。如果MaxRequestsPerChild為"0",子進程將永遠不會結(jié)束。
</IfModule>
工作模式修改方法:
重新編譯指定工作模式(默認為prefork)
./configure --with-mpm=worker
注意:
對工作模式相關(guān)參數(shù)做出更改后,必須關(guān)閉apache服務(wù)后重新啟動服務(wù)方可。
直接利用restart啟動將是無效的。
worker模式使用多個子進程,每個子進程有多個線程。每個線程在某個確定的時間只能維持一個連接。通常來說,在一個高流量的HTTP服務(wù)器 上,Worker MPM是個比較好的選擇,因為Worker MPM的內(nèi)存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一個線程崩潰,整個進程就會連同其所有線程一起”死掉”.由于線程共享內(nèi)存空間,所以一個程序在運行時必須被系統(tǒng)識別為”每 個線程都是安全的”。
prefork方式速度要稍高于worker,然而它需要的cpu和memory資源也稍多于woker。
查看現(xiàn)使用的工作模式:
apachectl -l
兩種模式配置文件+說明:
perfork模式:
復(fù)制代碼 代碼如下:
<IfModule mpm_prefork_module>
ServerLimit 2000
#連接數(shù)大于256需設(shè)置此項。20000是ServerLimit這個參數(shù)的最大值
StartServers 5
#初始化時建立的子進程數(shù)。prefork默認為5
MinSpareServers 10
#最小的空閑進程數(shù)
MaxSpareServers 15
#最大的空閑進程數(shù)
MaxClients 1000
#最大并發(fā)客戶端連接數(shù)上限
MaxRequestsPerChild 10000
#控制服務(wù)器殺死舊進程產(chǎn)生新進程的頻率
#將MaxRequestsPerChild設(shè)置成非零值有兩個好處:
#1.可以防止(偶然的)內(nèi)存泄漏無限進行,從而耗盡內(nèi)存。
#2.給進程一個有限壽命,從而有助于當服務(wù)器負載減輕的時候減少活動進程的數(shù)量。
</IfModule>
worker模式:
復(fù)制代碼 代碼如下:
<IfModule mpm_worker_module>
StartServers 3
#初始化時建立的子進程數(shù)
MaxClients 2000
#最大并行處理數(shù)量。子進程最大數(shù)量=MaxClients/ThreadsPerChild
ServerLimit 25
#只有在你需要將MaxClients和ThreadsPerChild設(shè)置成需要超過默認值16個子進程的時候才需要使用這個指令。不要將該指令的值設(shè)置的比MaxClients 和ThreadsPerChild需要的子進程數(shù)量高。
MinSpareThreads 50
#最少空線程數(shù)
MaxSpareThreads 200
#最大空閑線程數(shù)
ThreadLimit 200
#這個指令設(shè)置了每個子進程可配置的線程數(shù)ThreadsPerChild上限,該指令的值應(yīng)當和ThreadsPerChild可能達到的最大值保持一致。
ThreadsPerChild 100
#子進程建立的服務(wù)線程數(shù)
MaxRequestsPerChild 0
#設(shè)置每個子進程在其生存期內(nèi)允許伺服的最大請求數(shù)量。到達MaxRequestsPerChild的限制后,子進程將會結(jié)束。如果MaxRequestsPerChild為"0",子進程將永遠不會結(jié)束。
</IfModule>
工作模式修改方法:
重新編譯指定工作模式(默認為prefork)
復(fù)制代碼 代碼如下:
./configure --with-mpm=worker
注意:
對工作模式相關(guān)參數(shù)做出更改后,必須關(guān)閉apache服務(wù)后重新啟動服務(wù)方可。
直接利用restart啟動將是無效的。
您可能感興趣的文章:
- php pcntl_fork和pcntl_fork 的用法
- 小結(jié)Python用fork來創(chuàng)建子進程注意事項
- Apache Prefork、Worker和Event三種MPM詳解
- python高并發(fā)異步服務(wù)器核心庫forkcore使用方法
- grails不能運行fork模式解決方法
- PHP使用pcntl_fork實現(xiàn)多進程下載圖片的方法
- Python中的進程分支fork和exec詳解
- Linux系統(tǒng)中C語言編程創(chuàng)建函數(shù)fork()執(zhí)行解析
- git fork同步是什么意思?
- Linux中fork()函數(shù)實例分析
相關(guān)文章
linux操作系統(tǒng)原理 linux系統(tǒng)基礎(chǔ)教程
很多對linux操作系統(tǒng)有興趣的朋友想有一個深入的學(xué)習(xí),本篇文章給大家詳細講解了linux操作系統(tǒng)的原理,希望能夠?qū)δ阌兴鶐椭?/div> 2018-01-01apache documentroot指向htcdoc之外提示403錯誤的解決方法
在windows和RH都碰到過,只要把主目錄指到其他地方后就出現(xiàn)權(quán)限不夠的403提示,郁悶了好久。2010-04-04詳解Lamp環(huán)境搭建Linux CentOS6.5編譯安裝mysql5.6
這篇文章主要介紹了詳解Lamp環(huán)境搭建Linux CentOS6.5編譯安裝mysql5.6,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05最新評論