NO IMAGE

配置網站,要充分的把系統資源利用出去,榨乾系統的一切潛能,讓網站速度發揮到極致。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有兩個比較重要的配置引數,那就是:ThreadsPerChild和MaxClients。 ThreadsPerChild用來控制每個子程序允許建立的執行緒數,ThreadsPerChild用來控制允許建立的匯流排程數。

那麼,這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中,既有針對 prefork的MaxClients設定,也有針對worker的。前者在<IfModule mpm_prefork_module>段,後者在<IfModule mpm_worker_module>段。這裡以woker為例,原配置為:

<IfModule mpm_worker_module>
StartServers          2
MaxClients          150
MinSpareThreads      25
MaxSpareThreads      75
ThreadsPerChild      25
MaxRequestsPerChild   0
</IfModule>

MaxClients如果要設定超過256的話,就需要同步修改ServerLimit的數值,因為ServerLimit的預設值是256.比如這裡需要配置為1024:

<IfModule mpm_worker_module>
StartServers          10
ServerLimit         1024
MaxClients          1024
MinSpareThreads      25
MaxSpareThreads      75
ThreadsPerChild      25
MaxRequestsPerChild   0
</IfModule>

那麼,要怎麼才能知道是不是需要增大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,可以配置要壓縮的檔案型別。預設配置為:

<IfModule mod_deflate.c>

AddOutputFilterByType DEFLATE text/html text/plain text/xml

</IfModule>

上面配置較為合理,因為一般情況下,不需要對圖片、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就能夠最大限度的挖掘系統資源了!