先閱讀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性能影響的核心和關鍵。用戶能夠在配置文檔中找到如下配置段:apache
複製代碼服務器
這就是控制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已經得到了較大的性能改善。優化