首頁  >  文章  >  php教程  >  Apache的效能最佳化(四)

Apache的效能最佳化(四)

黄舟
黄舟原創
2016-12-21 11:26:161584瀏覽

下面是prefork的預設設定段:

 

StartServers        

MaxSpareServers     10  //設定了最大的空閒進程數,如果空閒進程數大於這個值,Apache會自動kill掉一些多餘進程。這個值不要設得太大,但如果設的值比MinSpareServers小,Apache會自動把其調整為MinSpareServers+1。若站點負載較大,可考慮同時增加MinSpareServers和MaxSpareServers。

MaxClients         150  // MaxClients是這些指令中最為重要的一個,設定的是Apache可以同時處理的請求,是對Apache效能影響最大的參數。其預設值150是遠遠不夠的,如果請求總數已達到這個值(可透過ps -ef|grep http|wc -l來確認),那麼後面的請求就要排隊,直到某個已處理請求完畢。這就是系統資源還剩下很多而HTTP存取卻很慢的主要原因。系統管理員可以根據硬體配置和負載情況來動態調整這個值。雖然理論上這個值越大,可以處理的請求就越多,但Apache預設的限制不能大於256(在2.0中源自於#define DEFAULT_SERVER_LIMIT 256)。如果把這個值設為大於256,那麼Apache將無法啟動。事實上,256對於負載稍重的站點也是不夠的。在Apache 1.3中,這是個硬限制。如果要加大這個值,必須在「configure」前手工修改的原始碼樹下的src/include/httpd.h中找出256,就會發現「#define HARD_SERVER_LIMIT 256」這行。把256改為要增加的值(如4000),然後重新編譯Apache即可。在Apache 2.0中新加入了ServerLimit指令,使得無須重編譯Apache就可以加大MaxClients。 ServerLimit使用也是單獨加入一行在這就可以了。如果ServerLimit的值再這定義超過了20000,就要修改server/mpm/prefork/prefork.c  #define MAX_SERVER_LIMIT 20000。將20000改成更大的值。

 

MaxRequestsPerChild  0  //設定的是每個子程序可處理的請求數。每個子進程在處理了「MaxRequestsPerChild」個請求後將自動銷毀。 0意味著無限,即子程序永不銷毀。雖然預設為0可以使每個子進程處理更多的請求,但如果設為非零值也有兩點重要的好處:可防止意外的記憶體洩漏;在伺服器負載下降的時侯會自動減少子進程數。

 

 

worker的工作原理是,由主控制進程產生「StartServers」個子進程,每個子進程中包含固定的ThreadsPerChild執行緒數,各個執行緒獨立地處理請求。同樣,為了不在請求到來時再產生線程。

每個行程可以擁有的執行緒數量是固定的。 伺服器會根據負載情況做增加或減少進程數量的調整。單一控制進程負責子進程的建立。每個子進程可以建立ThreadsPerChild指定的固定數量的執行緒。 然後,由獨立的線程監聽並處理到來的連接。

Apache總是試圖維持一個備用的或說空閒的服務執行緒池。 如此,客戶端無須等待執行緒或進程的建立即可處理。 最初建立進程的數量是由StartServers指令決定。 其後,Apache偵測所有行程中空閒執行緒的總數,並新建或結束進程使總數維持在MinSpareThreads和MaxSpareThreads所指定的範圍以內。 由於這個過程是自動調整的,幾乎沒有必要修改這些指令的預設值。 同時可以處理的客戶端的最大數量取決於MaxClients指令,而進程建立的最大數量取決於ServerLimit指令。 ServerLimit乘以ThreadsPerChild必須大於等於MaxClients。

 以上就是Apache的效能最佳化(四)的內容,更多相關內容請關注PHP中文網(www.php.cn)! 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn