優化Apache服務器的性能

##注:這篇文章對apache的優化說的思路比較清晰,本人以爲很是好,故轉載,但願對你們有所幫助,文章中的內容請本身甄別!!!!html

 文章出處:http://bbs.chinabyte.com/thread-394880-1-1.html數據庫

     經過擠出Apache服務器的每一分潛力你可讓你的網站留給別人的印象大大改觀,特別是對一些**站更是如何。這篇文章主要涉及到對Apache服務器的安裝和設置如何進行優化,這也是你最有控制權的部分。
測試與提升性能
Apache服務器已經被設計得儘量的快,即便你用一臺配置不高的機器,用不着進行太複雜的設置,它的響應內容就足以塞滿之前的各類窄帶鏈接。但隨網站內容日益複雜和帶寬的增長,對Apache進行優化以取得更好的性能變得日益重要起來。
若是優化的結果僅僅是極小的性能提高那真是浪費時間。試想一下,你花了好幾個小時甚至幾天調整Apache的各類參數但結果僅是幾個百分點的性能提高?所以,在優化前你作的第一步應該是測試你目前的服務器的性能水平以便決定如何優化你的服務器並衡量優化的效果。
關於對Apache的測試咱們已經不是第一次提到了(見《衝出水面》一文),如同咱們之前提到的,肯定究竟是哪一部分致使的瓶頸每每是一件困難的事, 是由於Apache自己的設置問題仍是因爲你使用的**站程序環境?關於查找是不是由於網站程序引發的問題已經超出了本文的範圍,這裏咱們主要講一下提升 Apache服務器速度的一些一般作法以及它如何與構成WEB網站的其它組件進行交互。
主機硬件
Apache所在的機器與操做系統環境是對性能影響最大因素,很明顯,一以368的PC與一臺P4或雙處理器的機器不會有一樣的性能。不過,若是不涉 及硬件的改變,咱們能夠作的最大的事是首先看一下Apache是否運行在一臺專用的服務器上,若是與其它應用共用一臺服務器確定會影響服務器的性能。
在大多數狀況下,告別是對靜態網站而言,內存數量是一個影響性能的關鍵因素,由於它決定了Apache能夠緩存多少內容。它緩存的內容越多,在硬盤上 讀取內容的機會就越少,而存取硬盤上的特定文件是一件很費時的操做。若是你的網站主要是一些靜態內容,你最好使用mod_cache選項,若是你的內存足 夠大,可使用mod_mem_cache選項。
第一個選項將信息緩存在磁盤上,當它與mod_include選項一塊兒使用時會有很好的效果,這個選項在創建一個頁面時在緩存中保存它的最終版本。使用mod_mem_cache將緩存內容保存在一個能夠被全部Apache進程共享的內存堆中。
使用更快的磁盤或進一步使用RAID能夠提升Apache對磁盤文件的訪問速度。注意,若是你作了下面的全部這些優化,一個硬件的(而非軟件)升級方案是更好的選擇。最後一個談到的關於硬件的問題是CPU能力,這對動態內容網站的影響很大,動態內容越多要求越高。
主機環境
無論是使用何種操做系統,下面這些原則都是適用的:
●儘量減小非必要的後臺運行的程序數目。若是你真的很關心服務器性能,你甚至能夠關閉一些一般被認爲是必要的後臺服務。好比在UNIX下面,你能夠 關閉NFS服務,任何打印服務甚至郵件發送服務(若是不使用這些服務),在Windows系統下,使用控制面板優化系統和緩存,固然,對於必要的服務(如 MySQL)仍然須要運行。
●避免使用系統。若是在服務器運行時你利用它進行其它工做(如編譯軟件,編輯文件或配置機器)你必將下降服務器提供的性能。若是你必須在上面安裝一些組件,你能夠在其它機器上編譯好後拷備到服務器上。
●讓你的系統組件維持在最新。雖然這主要是從安全角度的建議,不過軟件補丁每每提供了網絡和I/O方面的性能提高。
Apache程序
下面,就談到Apache自己了。
首先你確認一下是否Apache在編譯時是否僅包含了你的網站須要的組件。這意味着,你能夠忽略一些用不着的組件。這使它佔用的內存更少,並且,它也表示你不用意外的激活一些選項下降服務器的性能。
靜態仍是動態
靈活性常是一些Apache管理員考慮的主要因素,但靈活性也有代價,使用動態載入模塊很是方便,但它將致使性能降低,由於在須要時模塊纔會被載入。不過動態模塊也有利於減小服務器對內存的需求。
爲了裝Apache安裝成靜態模式,使用設置腳本定義你須要的模塊,可是不要將它們定義爲共享的(例如:使用--enable-rewrite而不要用--enable-rewrite=shared,也不要用共享選項--enable-so)。
模塊設置
若是你使用Apacher的靜態模式,你必須當心選項載入的模塊,這是靜態模式帶來的一個開銷--載入的模塊越多,佔用的內存越大,對於使用分叉多線程模型的程序這個效果更是明顯。
注意一些項目是被自動包含的,所以你須要顯式的指定包含或禁用須要的模塊。另外要記住若是須要包含進來一些如認證,PHP或mod_perl這樣的第 三方模塊,你須要WEB服務(Web service),使用con**ure -help命令來查看可使用的選項列表。
服務器設置
若是你的環境已經創建Apache也已經通過優化,就能夠查看你的設置文件來進行下一步的優化措施。一個好的方法就是簡化你的設置文件將文件中的指示(directives)減小到幾百行內,首先是刪除掉那些註釋行,進而刪除任何非必要的內容。
簡化設置文件
第一步是簡化設置設置文件,它並不帶來任何直接的性能提高,但它將使設置文件易於使用減小你出錯的機會。
在進行優化以前,從一個默認提供的設置文件開始是一個不錯的主意。這些文件常被放在Apache的設置目錄中,文件名爲 httpd.conf.orig或者 httpd-std.conf,不要使用如performance-std.conf相似名稱的文件,從長遠的觀點看,若是你準備在裏面加入大量的附加設 置信息,它決不是一個好起點。另外一方面,若是你的目標是創建一個很快的靜態WEB服務器,這多是讓服務器運行起來的最簡單方法。
若是你熟悉Apache的設置指示用法或樂意瀏覽幫助文件,你能夠從設置文件中刪除全部的註釋內容,由於它們常常讓實際的指示內容變得難找,你也能夠刪除對當前平臺上用不到的多處理機方式(MPM)的引用。
禁用模塊
如今,咱們已經獲得了一個清爽的設置文件,下面咱們能夠開始刪除其中咱們系統用不到的元素,特別是:
●HostnameLook**(主機名查找),這增長了處理每一個請求的開銷,首先,服務器會對DNS系統作一個反向查詢以找出客戶系統的主機名,然 後又進行正向查詢看得到的主機名是否真實指向客戶的IP。大多數狀況下,你能夠簡單的關閉這個功能,若是你常常處理服務器日誌,這個工做徹底能夠在之後進 行。你能夠經過在設置文件中加入指示HostnameLook** off來關閉這個功能。
●符號鏈接。當打開這個選項時,Apache將檢查每一個請求中是否包含對符號鏈接的引用,這將對請求中包含的每一個路徑調用一次lstat()系統調用。除非你準備使用符號鏈接,不然用 Options -FollowSymLinks 來關掉它。
●服務器狀態信息。儘管這對測試與監控服務器頗有用,但它也爲服務器帶來了額外的開銷,你能夠經過尋找任何相似SetHandler server-status的指示來關閉,若是可能,你能夠在安裝Apache時移除這個模塊。
●在能夠更精確的時候儘量不要使用通配符之類的靈活選項,例如,對於DirectoryIndex指示,明確的指定設置文件列表,最經常使用的放在最前。
●除非你有很好的理由不然就容許CGI的執行,將似有的CGI文件放到一個特定的目錄併爲之設定正確的權限,這避免了Apache對每個請求都要判斷一次要求的是一個靜態文件仍是一個動態文件。
禁用日誌
寫入日誌信息是一個很花費時間的工做,儘管Apache保持日誌文件的打開狀態以節省打開文件的時間,但仍然得花費很多的時間。若是沒有必要存儲日誌信息,你能夠關閉這個選項以節省出更多的處理器時間,只須要在設置文件中把日誌那一行註釋掉就能夠關掉它。
若是必須保留日誌,你能夠關閉HostnameLook**選項(見上文)而後把日誌文件拷備到另外一臺機器上作進一步分析。
簡化目錄級的設置
htaccess文件能夠極大的擴展Apache的設置參數,而無需每次你改變設計都要編輯Apache主設置文件,但對這個文件的使用也下降了服務器的性能。
若是使用這個文件,Apache必需首先在當前目錄中查找是否存在這個文件,若是存在就解析這個文件並在當前目錄中應用文件中的設置。更壞的 是,Apache不只要查看當前的目錄,還要查看當前目錄的全部上層目錄是否包括htaccess文件以根據全部這些文件最終肯定設置。
若是你想最優化服務器的性能,你應該禁止使用htaccess文件,任何基本目錄的設置均可以在主設置文件中進行,而主設置文件僅在服務器啓動時解析一次。爲了禁用htaccess文件,在任何節里加上指示AllowOverride None。
多處理方式設置
多處理方式(Multi-Processing Module/MPM)他容許特定平臺處理多個併發鏈接。MPM模塊是平臺相關的,對於Unix、Windows、BeOS、和NetWare有不一樣的解 決方案,一些平臺有不止一個方案能夠選擇。對大多數用戶而言,對於特定平臺的默認設置已經工做得很好,而精確調整這些參數是一個費時的工做。不過若是你想 最大限度的挖掘Apache的潛力,你必須調整這些設置。
對大多數平臺而言,只有一種MPM可選,不過在UNIX下則有兩個選項:prefork與worker,prefork模式生成多個相同的 Apache進程,而worker模式建立多個線程。一般而言,對於只有一到兩顆處理器的系統,prefork模式工做得更好,而對於擁有更多處理器的系 統,線程模型工做得更有效率。
無論哪一種狀況,MaxClients指示是最有效的提升服務器性能的方法,它控制了Apache能夠處理的最大併發鏈接數。
優化靜態內容
若是你的WEB服務器使用了大量靜態內容或者你分別用兩個WEB服務器處理動態和靜態內容,那麼你如今的主要目標就是縮短服務器發送被請求內容的響應 時間,最簡單的方法就是使用 mod_cache緩存模塊。你可使用mod_disk_cache和mod_mem_cache來分別提供基於磁盤的緩存和基於內存的緩存。
你能夠查看關於mod_cache的說明文件以取得進一步的信息。
優化動態內容
動態內容多是全部WEB服務器中最消費時間的部分,特別是使用CGI的時候,一個簡單的程序均可能會把響應時間增長好幾秒。
使用基於腳本的方案的一大好處是它們在Apache裏裝入瞭解釋器,這就減小了執行時再裝入解釋器的時間,一些方案還把解析過的腳本緩存起來,這樣下一次遇到一樣的請求就能夠直接執行而無需再次解析。
對特定系統的調整優化很複雜並且很花時間,並且你須要調整特定的腳本以利用優化的成果。
不過對動態內容的優化效果是很是明顯的,僅僅是把perl腳本的執行模式從CGI轉到mod_perl就能夠減小多達70%的執行時間,若是咱們進一 步,還可使用到數據庫的持久鏈接或在屢次請求之間緩存信息,這對電子商務網站很是有用,它也減少了不一樣請求間重複裝載信息的開銷。
總結
儘管Apache是一個高可定製的功能強大且至關複雜的服務器軟件,咱們頗有興趣的注意到即便是Apache的標準安裝也能夠獲得不錯的性能。調整 Apache的設置參數是一個能夠輕易顯着提升服務器性能的方法。但不幸的是,經常咱們在Apache裏最沒法控制的內容--例如網站的動態內容腳本和 CGI是影響網站性能的最重要方面,若是你管理一個典型的Apache服務器你會發現Apache響應一個傳入鏈接以及最後把內容發送給客戶的所花費的時 間是以毫秒記的,而等待所需數據資源的時間經常達到幾秒鐘。
固然,這並非說咱們的優化工做沒什麼意義,優化的效果日積月累也不可小視。另外,重要的是,經過簡化你的設置文件,你能夠大大減少服務器的管理負擔apache

相關文章
相關標籤/搜索