apache查看工作模式及調優


一,查看工作模式

/usr/sbin/httpd -l

 

Compiled in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c

如果出現prefork.c,表示apache工作在prefork模式下

 

二,prefork調優

 ServerLimit 3000
StartServers 750
MinSpareServers 5
MaxSpareServers 100
MaxClients 3000
MaxRequestsPerChild 10000


首先來看看各個參數的意義(引號里引用的是官方文檔的描述):
(1)ServerLimit和MaxClients 服務器最大同時響應請求數
這個就是你當前配置的最大的並發響應數,對應的是的進程數,兩個參數同時修改,MaxClients不得大於ServerLimit參數。
ServerLimit的大小,取決於你系統的資源,每個進程默認占用2M內存,基本可以按照這個公式來計算:最大內存*80%/2M=ServerLimit


(2)StartServers 750 啟動時默認啟動的進程數
這個參數默認是5,因為會通過自動啟動新進程來增加響應服務的進程數,這個值不做調整的也是可以的,會由默認的5增加到滿足服務的進程數,但是會出現開始啟動時的卡住。
小 啟動參數有一個好處:就是可以讓傳遞后后端tomcat的壓力緩慢增加上來,而不是一下子增加壓力。可以把這個調整到當前服務最大的並發數,當前服務最大 並發連接數,可以通過監控進程個數:ps -ef | grep httpd | wc -l 來獲得。不用調得太大,否則是無謂增加通過jk去跟tomcat建立的連接。
注意:
所以不要一次啟動太多的進程,只啟動足夠用的進程即可。其他增加的流量,會自動調整進程數,直到MaxClients參數限定的范圍。


(3)MinSpareServers 5 最小空閑進程
MinSpareServers指令設置空閑子進程的最小數量。所謂空閑子進程是指沒有正在處理請求的子進程。如果當前空閑子進程數少於MinSpareServers ,那么將以第一秒一個,第二秒兩個,第三秒四個,按指數遞增個數的速度產生新的子進程。


(4)MaxSpareServers 10 最大空閑進程
MaxSpareServers指令設置空閑子進程的最大數量。所謂空閑子進程是指沒有正在處理請求的子進程。如果當前有超過MaxSpareServers數量的空閑子進程,那么父進程將殺死多余的子進程。

可以調整這兩個參數,但是這兩個參數的值不能設得太大,否則apache進程太多
官網上關於這兩個參數都有這么句話:“將此參數設的太大通常是一個壞主意。”
在一台壓力大(並發訪問2800)的服務器上,MaxSpareServers這個值設置的是200。


(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了,但對於絕大多數情況來說仍是足夠的。沒有把它默認值設的更小的原因在於代碼里還有點問題:有時發送一個包之后,計時器沒有復位。”


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM