NO IMAGE

Apache的配置是針對原先較低的伺服器來配置的,原先的配置顯然已經不適合了,所以今天開始研究下Apache配置的問題。

1. 首先要了解Apache採用的MPM(Multi -Processing Modules,多道處理模組)
MPM是Apache的核心,它的作用是管理網路連線、排程請求。

Apache2.0中MPM分為3種(perfork、worker、event)。perfork從Apache1.3中繼承下來的,它採用的是程序管理方式,所以它可以提供更可靠的效能和更好的相容性;worker是Apache2.0中新增加的方式,它採用了執行緒控制方法,可以比perfork更節約系統開銷、處理更多的資料量,但同時相容性並不是很好,很多舊的程式無法工作在worker下;event仍處於試驗階段,它為每個任務分配不同的程序池,目前不應該採用。
通過命令 httpd -l 可以獲取目前Apache採用的是哪種MPM
本文僅針對perfork方式進行討論

2. 瞭解perfork的工作方式

檢視Apache2.0的配置檔案httpd.conf,可以看到perfork的配置段,大致如下:

ServerLimit       256
StartServers       5
MinSpareServers   10
MaxSpareServers   15
MaxClients       256
MaxRequestsPerChild  4000

當Apache被啟動時,Apache會自動建立StartServers個程序,並且盡力將空閒程序數保持在MinSpareServers和MaxSpareServers之間。
如果空閒程序小於MinSpareServers,Apache將會以大約每秒1個的速度新建程序。
如果空閒程序小於MaxSpareServers,Apache將會刪除多餘的空閒程序,釋放伺服器資源。
程序數的最大值由MaxClients控制,在Apache1.3中最大隻能設定為256,但在Apache2.0中,可以通過在配置開頭增加ServerLimit專案來突破256的限制,此時必須MaxClients ≤ ServerLimit ≤ 20000
MaxRequestsPerChild用來控制每個程序在處理了多少次請求之後自動銷燬,這個引數可以設定為0表示無限(即不銷燬程序)。

3. 優化perfork
首先,對於一個負載相對較高的網站來說,256的程序限制是不夠的,如果伺服器已經達到256的極限,那麼接下去的訪問就需要排隊,這也就是為什麼某些伺服器負載不高,但是訪問卻很慢的原因之一。所以首先應該瞭解伺服器在繁忙時的程序數量。
通過命令ps -ef|grep httpd|wc -l可以瞭解到當前系統中Apache程序數,通過設定ServerLimit和MaxClients來達到為伺服器軟擴容的目的。

然後,在訪問量高峰期,經常會出現的情況是突然之間發生非常多的併發連線,然後突然之間減少了很多訪問。如果Apache沒有準備足夠數量的預備程序,那訪問只能等待Apache每秒1個的新增程序,隨後又要將多餘的程序刪除,那Apache只能一直忙於新建和銷燬程序,大大地降低了訪問速度。可以適當增加StartServers、MinSpareServers、MaxSpareServers來使得Apache不需要一直忙於作無用功。

最後,強烈推薦MaxRequestsPerChild不要設定為0,設定為非0,可以保護Apache程序免遭記憶體洩漏的影響,因為你不知道執行在Apache上的應用程式在什麼時候會出錯導致記憶體洩漏。

設定完之後大致是這樣的:

ServerLimit       1000
StartServers       30
MinSpareServers   30
MaxSpareServers   45
MaxClients       1000
MaxRequestsPerChild  4000

———————————————————————————–分割線——————————————————————-

apache高負載效能調優2011-09-13 21:03:05

分類: 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效能影響的核心和關鍵。使用者可以在配置文件中找到以下配置段:

   
       StartServers         5
       MinSpareServers      5
       MaxSpareServers     10
       MaxClients          15
       MaxRequestsPerChild  0 

這就是控制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配置段的推薦配置:

   
       StartServers         5
       MinSpareServers      5
       MaxSpareServers     10
       ServerLimit       1024
       MaxClients        768
       MaxRequestsPerChild  0
   

完成了上述對Apache的調整,Apache已經獲得了較大的效能改善。

有關apache效能優化 高併發借鑑相關知識點網址:

25個apache效能優化技巧:

http://wenku.baidu.com/link?url=QS_bRiFc-MJ5h0ZQSWhJ2vc7oEH_H667Nsx-43XPqAtdGrKWQGzbIUSs55ricEazYvr-gn3mka1a17w9iQ-TEx2pu1ud2Laf14KpbVNAtRy

apache負載調優:

http://blog.chinaunix.net/uid-22120556-id-2827648.html

apache效能優化:

http://sookk8.blog.51cto.com/455855/275759/