apache高負載性能調優
分類: LINUX
先閱讀apache配置優化建議如下,再對相關參數進行調整,觀察伺服器狀況.
Apache配置優化建議:
進入/usr/local/apache2/conf/extra 目錄下
Apache優化,
經過上述操作後,Apache已經能夠正常運作。但是,對于通路量稍大的站點,Apache的這些預設配置是無法滿足需求的,我們仍需調整Apache的一些參數,使Apache能夠在大通路量環境下發揮出更好的性能。以下我們對Apache配置檔案httpd.conf中對性能影響較大的參數進行一些說明。
(1) Timeout 該參數指定Apache在接收請求或發送所請求内容之前的最長等待時間(秒),若超過該時間Apache則放棄處理該請求,并釋放連接配接。該參數預設值為120,推薦設定為60,對于通路量較大的網站可以設定為30或15。
(2) KeepAlive 該參數控制Apache是否允許在一個連接配接中有多個請求,預設打開。但對于大多數論壇類型站點來說,通常設定為off以關閉該支援。
(3) MPM - prefork.c 在預設情況下Apache使用Prefork(程序)工作模式,可以說這部分的參數設定是對Apache性能影響的核心和關鍵。使用者可以在配置文檔中找到以下配置段:
<IfModule prefork.c>
複制代碼
這就是控制Apache程序工作的配置段,為了更好的了解上述配置中的各項參數,下面讓我們先了解一下Apache是如何控制程序工作的。我們知道,在Unix系統中,很多服務(Service)的守護程序(Daemon)在啟動時會建立一個程序以準備應答可能的連接配接請求,服務即進入了端口監聽狀态,當一個來自用戶端(Client)的請求被發送至服務所監聽的端口時,該服務程序即會處理該請求,在處理過程中,該程序處于獨占狀态,也就是說如果此時有其他請求到達,這些請求隻能“排隊”等待目前請求處理完成且服務程序釋放。這樣就會導緻越來越多的請求處于隊列等待狀态,實際表現就是該服務處理能力非常低下。Apache使用Prefork模式很好的解決了這一問題。下面我們來看看Apache實際上是如何高效率工作的。
當Apache啟動時,Apache會啟動StartSpareServers個空閑程序同時準備接收處理請求,當多個請求到來時,StarSpareServers進行會越來越少,當空閑程序減少到MinSpareServers個時,Apache為了能夠繼續有充裕的程序處理請求,它會再啟動StartsServers個程序備用,這樣就大大減少了請求隊列等待的可能,使得服務效率提高,這也是為什麼叫做Pre-fork的原因;讓我們繼續跟蹤Apache的工作,我們假設Apache已經啟動了200個程序來處理請求,理論上來說,此時Apache一共有205個程序,而過了一段時間,假設有100個請求都得到了Apache的響應和處理,那麼此時這100個程序就被釋放成為空閑程序,那麼此時Apache有105個空閑程序。而對于服務而言,啟動太多的空閑程序時沒有任何意義的,反而會降低伺服器的整體性能,那麼Apache真的會有105個空閑程序麼?當然不會!實際上Apache随時在檢查自己,當發現有超過MaxSpareServers個空閑程序時,則會自動停止關閉一些程序,以保證空閑程序不過過多。說到這裡,使用者應該對Apache的工作方式有了一定的了解,如果想獲得更多更詳細的說明請參閱Apache手冊文檔。
我們還有兩個參數沒有介紹:MaxClients和MaxRequestPerchild;MaxClients指定Apache在同一時間内最多允許有多少用戶端能夠與其連接配接,如果超過MaxClients個連接配接,用戶端将會得到一個“伺服器繁忙”的錯誤頁面。我們看到預設情況下MaxClients設定為15,這對一些中型站點和大型站點顯然是遠遠不夠的!也許您需要同時允許512個用戶端連接配接才能滿足應用需求,好吧,那麼就讓我們把MaxClients修改為512,儲存httpd.conf并退出,重新開機Apache,很遺憾,在重新開機過程當中您看到了一些錯誤提示,Apache重新開機失敗。錯誤提示中告訴您MaxClients最大隻能設定為256,相信您一定很失望。不過不要沮喪,Apache作為世界一流的Web Server一定不會如此單薄的!在預設情況下,MaxClients的确隻能設定為不超過256的整數,但是,如果您有需要完全可以随意定制,此時就需要使用ServerLimit參數來配合使用,簡單的說ServerLimit就像是水桶,而MaxClients就像是水,您可以通過更換更大的水桶(将ServerLimit設定為一個較大值)來容納更多的水(MaxClients),但要注意,MaxClients的設定數值是不能大于ServerLimit的設定數值的!
注:MaxClents < ServerLimit
下面讓我們了解一下MaxRequestPerChild參數,該參數指定一個連接配接程序中可以有多少個線程同時工作。也許這樣解釋過于專業,那麼您隻要想想“網絡螞蟻”、“網際快車FlashGet”中的“多點同時下載下傳”即可,該參數實際上就是限制最多可以用幾個“點”。預設設定為0,即為:不限制。但需要注意,如果将該值設定的過小會引起通路問題,如果沒有特殊需要或者通路量壓力并非很大可以保持預設值,如果通路量很大則推薦設定為2048。
好了,解釋了這麼多,讓我們看看經過修改後Perfork.c配置段的推薦配置:
完成了上述對Apache的調整,Apache已經獲得了較大的性能改善。