標籤:http io os ar 使用 sp 檔案 資料 on
Apache 音譯為阿帕奇,是北美印第安人的一個部落,叫阿帕奇族,在美國的西南部。相傳阿帕奇是一 個武士,他英勇善戰,且戰無不勝,被印第安人奉為勇敢和勝利的代表,因此後人便用他的名字為印第安 部落命名,而阿帕奇族在印第安史上也以強悍著稱。Apache 是世界使用排名第一的 Web 伺服器。它可以 運行在幾乎所有廣泛使用的電腦平台上。
在進行 web 效能容量規劃的時候首先利用 Apahce 計算記憶體消耗:
apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
apache_max_process = apache_max_process_with_good_perfermance * 1.5
為什麼會有一個 apache_max_process_with_good_perfermance 和 apache_max_process 呢?原因 是在低負載下系統可以使用更多的記憶體用於檔案系統的緩衝,從而進一步提高單個請求的響應速度。在高 負載下,系統的單個請求響應速度會慢不少,而超過 apache_max_process,系統會因為開始使用硬碟做 虛擬記憶體交換空間而導致系統效率急劇下降。 此外, 同樣的服務: 記憶體的機器的 apache_max_process 2G 一般只設定到 1G 記憶體的 1.7 倍,因為 Apache 本身會因為進程過多導致效能下降。
例子 1:
一個 apache + mod_php 的伺服器:一個 apache 進程一般需要 4M 記憶體
因此在一個 1G 記憶體的機器上:apache_max_process_with_good_perfermance < (1g / 4m) * 2 = 500
apache_max_process = 500 * 1.5 = 750
所以規劃你的應用讓服務盡量跑在 500 個進程以下以保持比較高的效率,並設定 Apache 的軟上限在 800 個。
例子 2:
一個 apache + mod_resin 的伺服器: 一個 apache 進程一般需要 2M 記憶體
在一個 2G 記憶體的機器上:
apache_max_process_with_good_perfermance < (2g / 2m ) * 2 = 2000
apache_max_process = 2000 * 1.5 = 3000
Apache 所在的機器與作業系統環境是對效能影響最大因素,很明顯,一以 368 的 PC 與一台 P4 或雙 處理器的機器不會有同樣的效能。不過,如果不涉及硬體的改變,我們可以做的最大的事是首先看一下 Apache 是否運行在一台專用的伺服器上,如果與其它應用共用一台伺服器肯定會影響伺服器的效能。
在大多數情況下, 特別是對靜態網站而言, 記憶體數量是一個影響效能的關鍵因素, 因為它決定了 Apache 可以緩衝多少內容。它緩衝的內容越多,在硬碟上讀取內容的機會就越少,而存取硬碟上的特定檔案是一 件很費時的操作。如果你的網站主要是一些靜態內容,你最好使用 mod_cache 選項,如果你的記憶體足夠 大,可以使用 mod_mem_cache 選項。
第一個選項將資訊緩衝在磁碟上,當它與 mod_include 選項一起使用時會有很好的效果,這個選項在 建立一個頁面時在緩衝中儲存它的最終版本。使用 mod_mem_cache 將緩衝內容儲存在一個可以被所有 Apache 進程共用的記憶體堆中。
使用更快的磁碟或進一步使用 RAID 可以提高 Apache 對磁碟檔案的訪問速度。注意,如果你做了下 面的所有這些最佳化, 一個硬體的(而非軟體)升級方案是更好的選擇。 最後一個談到的關於硬體的問題是 CPU 能力,這對動態內容網站的影響很大,動態內容越多要求越高。
以下是影響 Apache 的效能配置參數:
Timeout 300
指定網站響應的時間秒數。若超過這段時間仍未收到或送出資料,就中斷連線。意思是該參數指定 Apache 在接收請求或發送所請求內容之前的最長等待時間(秒),若超過該時間 Apache 則放棄處理該請
求,並釋放串連。該參數預設值為 120,推薦設定為 60,對於訪問量較大的網站可以設定為 30。
KeepAlive On|Off
啟用此項,表示允許保持持久串連,讓每次串連能提出多個請求。避免每請求一個檔案就跟伺服器建 立一次串連。也就是控制 Apache 是否允許在一個串連中有多個請求,預設開啟。但對於大多數論壇類型 網站來說,通常設定為 off 以關閉該支援。
MaxKeepAliveRequests 100
每次串連可提出請求的數量,設定為 0 表示數量不限,預設值為 100。.
KeepAliveTimeout 15
每次串連連續兩個請求之間的時間如果超過 15 秒還未到達, 則視為串連中斷。 這種做法可以最大限度 地利用有限的資源,這也是 Apache 效能如此優越的原因之一。
MinSpareServers 5
MaxSpareServers 20
Apache 在運行時會根據負載的輕重自動調整空閑子進程的數目。
提供瀏覽服務的 httpd 進程的數目需要隨串連數目的多少而變化,因此需要隨時保持幾個閑置的 httpd 進程等候新的串連請求。若閑置的進程數少於 5 個(預設值),則表示閑置進程太少,需要將其增加到 5 個;
若多於 20 個(預設值)則表示閑置進程太多,需將其減少到 20 個。
MaxClients 150
同時接入的數目太多時會降低系統訪問效能,設定此參數可限制同時串連的最大數值,預設值為 150,
它設定的就是 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 的設定數值的!下面讓 我們瞭解一下 MaxRequestPerChild 參數,該參數指定一個串連進程中可以有多少個線程同時工作。也許 這樣解釋過於專業,那麼您只要想想“網路螞蟻”、“網際快車 FlashGet”中的“多點同時下載”即可,該參數實 際上就是限制最多可以用幾個“點”。預設設定為 0,即為:不限制。但需要注意,如果將該值設定的過小會 引起訪問問題,如果沒有特殊需要或者訪問量壓力並非很大可以保持預設值,如果訪問量很大則推薦設定 為 2048
最佳化建議:
# 升級 Apache 到最新版本,新版本往往包含效能提升和安全更新。
# 在 httpd.conf 中設定 "HostNameLookups off" 能避免針對每個訪問者的 DNS 網域名稱的反向查詢。
# 對於繁忙的網站,在 httpd.conf 中設定 "MaxClients 230" 或者更高。這項設定讓更多的 httpd 進 程同時響應請求,並避免了處理器排隊的情況發生。
# 採用另外一台伺服器處理圖片檔案。
# 確保您的 Web 頁面和 CGI 頁面採用了瀏覽器緩衝技術。具體的文章可以參考本站:採用 mod_gzip 加速 Zope 和 Apache # 保持您的 Apache 苗條,編譯那些僅僅需要的模組,在編譯之前,修改 src/Configuration 檔案,
在那些不需要的模組之前用 # 號注釋掉。
# 如果不需要流量日誌,那麼把 httpd.conf 中的 TransferLog 指向到 /dev/null/
# 除非你確定使用 .htaccess 檔案來控制一些目錄的許可權,否則設定 "AllowOverride None" ,這樣 就免去 Apache 在每個目錄搜尋 .htaccess 檔案的勞役之苦。
# 不要讓不需要的後台進程運行。
# 千萬不要把頁面或者記錄檔寫到網路磁碟上,例如 NFS。
# 不要讓 Apache (httpd) 運行於 inetd 模式。
# 不要讓 X Windows 運行在你的 Web 伺服器上,用 Ctrl-Alt-Backspace 關閉 X 。
# 避免使用 SSI tag。
# 在 CGI 指令碼中:
* 檔案 I/O:開啟的檔案數目越少越好。
* Shell 命令:採用全路徑來調用 shell 命令。
* 如果你的網站主要以 CGI 來驅動,那麼請使用 mod_perl。
* 在你的 Web 頁面目錄中,不要讓檔案數超過 1000 個,檔案越多花費在定位上的時間也越多。
# 在 Web 伺服器上的圖片越少越好,保證每個圖片都經由圖片壓縮器運行。
# 對你的網站做壓力測試,建議採用 Apache 內建的 ab 命令來測試。
# 為了最好的效能,最好把網線拔掉,這樣你的 Web 伺服器就十分安全,而且負載馬上降為 0
Apache_效能調優