配置網站,要充分的把系統資源利用出去,榨干系統的一切潛能,讓網站速度發揮到極致。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用來控制每個子進程允許建立的線程數,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中,既有針對prefork的MaxClients設置,也有針對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就能夠最大限度的挖掘系統資源了!