apache 最佳化配置 prefork模式

來源:互聯網
上載者:User

標籤:apache   最佳化   

(一)prefork模式下(其他模式下不適用), apache需要最佳化的主要參數: 
ServerLimit 3000 
StartServers 750 
MinSpareServers 5 
MaxSpareServers 100 
MaxClients 3000 
MaxRequestsPerChild 10000 
首先來看看apache各個參數的意義(引號裡引用的是官方文檔的描述): 
(1)ServerLimit和MaxClients 伺服器最大同時響應請求數 
這個就是你當前配置的apache最大的並發響應數,對應的是apache的進程數,兩個參數同時修改,MaxClients不得大於ServerLimit參數。 
ServerLimit的大小,取決於你系統的資源,每個apache進程預設佔用2M記憶體,基本可以按照這個公式來計算:最大記憶體*80%/2M=ServerLimit 
(2)StartServers 750 啟動時預設啟動的進程數 
這個參數預設是5,因為apache會通過自動啟動新進程來增加響應服務的進程數,這個值不做調整的也是可以的,會由預設的5增加到滿足服務的進程數,但是會出現開始啟動時的卡住。 
小啟動參數有一個好處:就是可以讓傳遞後後端tomcat的壓力緩慢增加上來,而不是一下子增加壓力。可以把這個調整到當前服務最大的並發數,當前服務最大並發串連數,可以通過監控apache進程個數:ps -ef | grep httpd | wc -l 來獲得。不用調得太大,否則是無謂增加apache通過jk去跟tomcat建立的串連。 
注意: apache進程跟tomcat建立串連後,不會釋放此串連,會一直保持串連,直到timeout,如果沒有timeout時間,就會永久串連。timeout的設定,會在後面jk配置裡說明。 
所以不要一次啟動太多的apache進程,只啟動足夠用的進程即可。其他增加的流量,apache會自動調整進程數,直到MaxClients參數限定的範圍。 
(3)MinSpareServers 5 最小空閑進程 
MinSpareServers指令設定空閑子進程的最小數量。所謂空閑子進程是指沒有正在處理請求的子進程。如果當前空閑子進程數少於MinSpareServers ,那麼Apache將以第一秒一個,第二秒兩個,第三秒四個,按指數遞增個數的速度產生新的子進程。 
(4)MaxSpareServers 10 最大空閑進程 
MaxSpareServers指令設定空閑子進程的最大數量。所謂空閑子進程是指沒有正在處理請求的子進程。如果當前有超過MaxSpareServers數量的空閑子進程,那麼父進程將殺死多餘的子進程。 
可以調整這兩個參數,但是這兩個參數的值不能設得太大,否則apache進程太多,會導致對應開啟的tomcat進程也會很多。 
官網上關於這兩個參數都有這麼句話:“將此參數設的太大通常是一個壞主意。” 
在一台壓力大(並發訪問2800)的伺服器上,MaxSpareServers這個值設定的是200。 
設定了這個值的好處是不會有太多的閒置進程在消耗資源,同時減少apache和tomcat的串連連接埠。 
關閉空閑apache進程的同時,會釋放jk串連,同時釋放tomcat串連數,進而減少系統資源消耗。 
(5)MaxRequestsPerChild 10000 
"MaxRequestsPerChild指令設定每個子進程在其生存期內允許伺服的最大請求數量。到達MaxRequestsPerChild的限制後,子進程將會結束。如果MaxRequestsPerChild為"0",子進程將永遠不會結束。 
將MaxRequestsPerChild設定成非零值有兩個好處: 
* 可以防止(偶然的)記憶體流失無限進行,從而耗盡記憶體。 
* 給進程一個有限壽命,從而有助於當伺服器負載減輕的時候減少活動進程的數量。 
注意 
對於KeepAlive連結,只有第一個請求會被計數。事實上,它改變了每個子進程限制最大連結數量的行為。" 
也就是說實際上這個時候子進程最大串連數等於MaxRequestsPerChild*MaxKeepAliveRequests 
所以在開啟KeepAlive後,需要同時設定MaxRequestsPerChild和MaxRequestsPerChild,確保每個apache進程在服務一定請求數後會關閉,重新開啟新的子進程,避免apache進程異常導致的記憶體泄露和資源佔用。 
(6)Keep-Alive 
預設:ON 
發送的請求,在MaxRequestsPerChild裡面只算一個,不管這個串連發送了多少個請求。 
(7)MaxKeepAliveRequests 
預設:100 
"一個建立好的Keep-Alive串連,允許發送的請求的個數。一旦建立串連,要麼就是個數達到了斷開,要麼就是等KeepAliveTimeout時間到了中斷連線。 
MaxKeepAliveRequests指令限制了當啟用KeepAlive時,每個串連允許的請求數量。如果將此值設為"0",將不限制請求的數目。我們建議最好將此值設為一個比較大的值,以確保最優的伺服器效能。" 
這個數位設定,必須考慮在一個時間段內,同一個使用者訪問你的服務會發多少請求。要結合KeepAliveTimeout參數來考慮。 
舉個例子,使用者需要間隔時間不大於KeepAliveTimeout的時間內,連續請求10個檔案,那麼這個參數就應該設定成10,如果使用者在連續時間裡不斷請求訪問,則這個數值得設定得更多。否則就重建立立串連下載。一旦使用者連續進行了10個請求後,並且這個使用者肯定在完成這些請求後的5秒內不會再請求,甚至要在之後的很長時間後請求,那麼這個KeepAliveTimeout時間就可以設定得很短,以便儘早斷開這種使用者,把資源讓個其他使用者。 
(8)KeepAliveTimeout 
預設:5 
"在一個建立好的Keep-Alive串連上,在MaxKeepAliveRequests個數未滿的情況下,等待下一個請求的時間。" 
如果有請求到達,那麼apache等待IO響應的timeout時間時間開始生效,timeout時間沒等到響應,串連被斷開;如果KeepAliveTimeout時間內,沒有請求到達,串連就被斷開。 
具體設定可以參考配合MaxKeepAliveRequests參數。同時這個參數又受TimeOut參數影響,在一次成功串連中,TimeOut時間內沒有等到響應,也會中斷連線。 
(9)TimeOut 
預設:300 
"TimeOut指令用於設定Apache等待以下三種事件的時間長度: 
1. 接受一個GET請求耗費的總時間。 
2. POST或PUT請求時,接受兩個TCP包之間的時間。 
3. 應答時TCP包傳輸中兩個ACK包之間的時間。 
我們計劃在發展裡程中,逐步把它們分別變得更易配置。計時器在1.2版本之前的預設值為1200,而現在已經設定為300了,但對於絕大多數情況來說仍是足夠的。沒有把它預設值設的更小的原因在於代碼裡還有點問題:有時發送一個包之後,計時器沒有複位。”

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.