Apache服務器性能如何優化


配置網站,要充分的把系統資源利用出去,榨干系統的一切潛能,讓網站速度發揮到極致。Apache,是用戶瀏覽和網站數據的一個中間橋梁。但是在這里,我們雖然做得並不是很多,但是如果心細打理,有些設置也會起到立竿見影的效果。

 

1、安裝Apache的時候,要正確選擇MPM

要想讓Apache的性能最好,那么第一步要做到的是:選擇合適的MPM。

Apache有3個MPM,它們分別是:event、prefork和worker。

其中,event這個MPM比較適用於有大量連續連接的情況。KeepAlive的好處是,可以同一個TCP連接中相應多次請求:這種方式,可以使一個包含大量圖片的HTML文檔加速50%。在Apahce配置文件httpd.conf中設置KeepAlive為On,就可以啟動KeepAlive。

 

prefork 是一個非線程的MPM,。它的特點是:雖然不是很快,但是很穩定。它能夠隔離每個請求,所以,如果某個請求出現故障,不會影響其它請求。使用 prefork最重要的一個參數是MaxClients。這個MaxClients數值要足夠大,這樣可以在訪問高峰時發揮很好的性能;但是同時又不能太大,致使Apache所需內存超出物理內存的大小。

 

worker是Apache2版本中新開發的MPM,速度比prefork快很多。而且,由於使用多線程進行訪問處理,所以能夠處理相對海量的請求,而系統資源的占用也要小於基於進程的服務器。worker是Apache 2的主要使用方式。worker有兩個比較重要的配置參數,那就是:ThreadsPerChildMaxClients。 ThreadsPerChild用來控制每個子進程允許建立的線程數,MaxClients 用來控制允許建立的總線程數。

 

那么,這3個MPM要如何選擇呢?如果需要更好伸縮性,可以選用worker或event(因為它們是線程化的MPM);如果需要更加好的穩定性和兼容性(比如要適應一些舊的軟件),可以選用prefork。《從prefork到worker:修改ubuntu apache工作模式》

 

如果你仍然無法評估自己的需求,仍然不知道應該選擇哪個MPM,那么就推薦使用worker。

 

2、Apache配置優化

在Ubuntu中,Apache主要配置文件是/etc/apache2/apache.conf,以下就針對這個文件來配置。

 

(1)關閉DNS查詢

HostnameLookups在默認情況是已經被設置為off,務必保持該設置。如果需要統計客戶端DNS,那么可以使用第三方軟件來實現。

(2)優化MaxClients

Apache2啟動的時候會創建一些進程(配置文件中的StartServer設定的數目),並保持一個最大的MaxClients數;每一個超過該數目的連接請求,都會排隊等待。

 

這個MaxClients設置,是和MPM相關的。在apache.conf中,既有針對preforkMaxClients設置,也有針對worker 的。前者在段,后者在段。這里以woker為例,原配置為:
StartServers          2
MaxClients          150
MinSpareThreads      25
MaxSpareThreads      75
ThreadsPerChild      25
MaxRequestsPerChild   0

MaxClients如果要設置超過256的話,就需要同步修改ServerLimit的數值,因為ServerLimit的默認值是256.比如這里需要配置為1024:
StartServers          10
ServerLimit         1024
MaxClients          1024
MinSpareThreads      25
MaxSpareThreads      75
ThreadsPerChild      25
MaxRequestsPerChild   0

 

那么,要怎么才能知道是不是需要增大MaxClients呢?可以查看Apache2的錯誤日志文件/var/log/apache2/error.log,如果發現如下內容,就應該增大MaxClients了:

[error] server reached MaxClients setting,consider raising the MaxClients setting

 

(3)優化KeepAlive

Apache 的KeepAlive這個指令指定一段時間,在這段時間內,可以讓服務器和客戶端之間持同一個連接。這個特性,有其好處,也有其壞處。好處是,如果客戶端發出多個請求,服務端不必每次都花時間去創建連接。壞處就是,這段時間內,即使客戶端不再發出新的請求、訪問新的頁面,這個連接也會被占用,這對服務器資源來說是一種浪費。

在默認情況下,KeepAlive是設置為On的,KeepAliveTimeout設置為15秒。也就是說,在15秒之內,服務器平均每秒連接到150個不同的連接,那么從理論上講,服務器將同時有15×150=2250個連接,內存消耗比較嚴重。

那么我們要如何來優化KeepAlive呢?

a、可以禁用KeepAlive(設置為 Off);

b、將KeepAliveTimeout改小,比3或者5秒。

 

(4)啟用壓縮優化Apache

在 Apache1.3中,有個gzip模塊。在Apache2中,沒有了gzip,有一個新的模塊叫做deflate。這個模塊可以在用戶訪問網站時實時將內容進行壓縮,然后再傳給客戶端。因為壓縮比較高(測試結果顯示,其壓縮比最高可達97%,最少也有40%),所以deflate能夠極大地加速網站,節約帶寬。當然,壓縮是要花費CPU時間的。

要啟用該模塊,運行以下命令:

sudo a2enmod deflate

sudo /etc/init.d/apache2 force-reload

該模塊有一個配置文件:/etc/apache2/mods-enabled/deflate.conf,可以配置要壓縮的文件類型。默認配置為:

AddOutputFilterByType DEFLATE text/html text/plain text/xml

上面配置較為合理,因為一般情況下,不需要對圖片、PDF和mp3等文件進行壓縮,那是很費資源的事情。關於deflate,這里不詳細介紹。

 

(5)禁止apache不必要的日志

Apache寫日志是比較消耗資源的,如果沒必要存儲日志信息,推薦還是關閉此功能。

 

(6)使用緩存(mod_cache)提高apache性能

apache2 有兩種緩存模塊:一種是基於硬盤的,另外一種是基於內存的。前者由mod_disk_cache實現,后者由mod_mem_cache實現,不過它們都需要mod_cache的支持。在基於內存的緩存方式中,還有一個mod_file_cache模塊,它是用於搭配mod_mem_cache模塊使用的。

之后文章將繼續涉及這部分內容,這里就不詳細介紹,如有需要,可以參考apache的文檔。

3、使用反向代理

通過“反向代理”的方式,可以極大地提高web服務器的相應能力。Squid是一個不錯的代理、反向代理服務器,大家可以去了解了解。

通過以上合適的配置,Apache就能夠最大限度的挖掘系統資源了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM