(一)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引數來考慮。
(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了,但對於絕大多數情況來說仍是足夠的。沒有把它預設值設的更小的原因在於**裡還有點問題:有時傳送乙個包之後,計時器沒有復位。」
Apache優化配置詳解
apache主配置檔案 設定伺服器的基礎目錄,預設為apache安裝目錄 serverroot usr local apache 2.2.6 設定伺服器監聽的ip和埠 listen 80 設定管理員郵件位址 設定伺服器用於辨識自己的主機名和埠號 servername www.uenu.com 80 ...
apache 優化配置詳解
apache主配置檔案 設定伺服器的基礎目錄,預設為apache安裝目錄 serverroot usr local apache 2.2.6 設定伺服器監聽的ip和埠 listen 80 設定管理員郵件位址 設定伺服器用於辨識自己的主機名和埠號 servername www.uenu.com 80 ...
apache 1 3的配置優化
最近一直受apache的負載問題困擾,狀況是一上量 一天2500萬吧 頁面訪問速度就奇慢無比,找了個牛人診斷,修改httpd.conf後解決問題 這次裝的是apache1.3.39,直接編譯安裝,只帶了 prefix usr local apache1339 enable module so,然後安...