apache高負載性能調優

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>
  • StartServers 5
  • MinSpareServers 5
  • MaxSpareServers 10
  • MaxClients 15
  • MaxRequestsPerChild 0
  • </IfModule>
  • 複製代碼
    這就是控制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配置段的推薦配置:
    <IfModule prefork.c>
  • StartServers 5
  • MinSpareServers 5
  • MaxSpareServers 10
  • ServerLimit 1024
  • MaxClients 768
  • MaxRequestsPerChild 0
  • </IfModule>
  • 複製代碼
    完成了上述對Apache的調整,Apache已經獲得了較大的性能改善。

    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章