
日期:2008-07-05 作者:喜騰小二 來源:PHPChina
如何知道apache是工作在哪個模式下的,答案很簡單:apachectl -l即可。
這裡,我先以prefork模式為例來幫助參數的設定,其預設設定一般如下:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
prefork 控制處理序在最初建立“StartServers”個子處理序後,為了滿足MinSpareServers設定的需要建立一個處理序,等待一秒鐘,繼續建立兩個,再等待一秒鐘,繼續建立四個……如此按指數級增加建立的處理序數,最多達到每秒32個,直到滿足MinSpareServers設定的值為止。這種模式可以不必在請求到來時再產生新的處理序,從而減小了係統開銷以增加效能。MaxSpareServers設定了最大的空閒處理序數,如果空閒處理序數大於這個值,Apache會自動kill掉一些多餘處理序。這個值不要設得過大,但如果設的值比MinSpareServers小,Apache會自動把其調整為 MinSpareServers+1。如果站點負載較大,可考慮同時加大MinSpareServers和MaxSpareServers。 MaxRequestsPerChild設定的是每個子處理序可處理的請求數。每個子處理序在處理了“MaxRequestsPerChild”個請求後將自動銷毀。0意味着無限,即子處理序永不銷毀。雖然預設設為0可以使每個子處理序處理更多的請求,但如果設成非零值也有兩點重要的好處:1、可防止意外的記憶體泄漏。2、在伺服器負載下降的時侯會自動減少子處理序數。因此,可根據伺服器的負載來調整這個值。MaxClients是這些指令中最為重要的一個,設定的是 Apache可以同時處理的請求,是對Apache效能影響最大的參數。其預設值150是遠遠不夠的,如果請求總數已達到這個值(可透過ps -ef|grep httpd|wc -l來確認),那麼後麵的請求就要排隊,直到某個已處理請求完畢。這就是係統資源還剩下很多而HTTP訪問卻很慢的主要原因。雖然理論上這個值越大,可以處理的請求就越多,但Apache預設的限制不能大於256。ServerLimit指令無須重編譯Apache就可以加大MaxClients。
注意,雖然透過設定ServerLimit,我們可以把MaxClients加得很大,但是往往會適得其反,係統耗光所有記憶體。以我手頭的一臺伺服器為例:記憶體2G,每個apache處理序消耗大約0.5%(可透過ps aux來確認)的記憶體,也就是10M,這樣,理論上這臺伺服器最多跑200個apache處理序就會耗光係統所有記憶體,所以,設定MaxClients要慎重。
注意:我一直搞不清楚apache+php(常用模組)的安裝方式,每個httpd處理序占用多大記憶體比較合理,反正我這個10M肯定是大了。。。
模組安裝應該取最小集合:http://hi.baidu.com/thinkinginlamp/blog/item/d677cffc1e083d83b901a016.html
再來看看work模式,預設參數一般如下:
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0