Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> 電腦軟件教程 >> 服務器技術 >> Web服務器 >> 讓用Apache的網站速度更快

讓用Apache的網站速度更快

日期:2017/1/21 9:34:01      編輯:Web服務器

最近朋友的服務器訪問量過大,導致頁面打開遲緩,下載速度也降到了30-40KB/秒,由於經費和環境問題,集群方案沒有得以應用.考慮了如上的因素,我決定通過對Apache增加模塊來進行優化,下面是我的實施過程,如果你對其感興趣,不妨一看. 

正文: 
Apache 2.0在性能上的改善最吸引人.在支持POSIX線程的Unix系統上,Apache可以通過不同的MPM運行在一種多進程與多線程相混合的模式下,增強部分配置的可擴充性能.相比於Apache 1.3,2.0版本做了大量的優化來提升處理能力和可伸縮性,並且大多數改進在默認狀態下即可生效.但是在編譯和運行時刻,2.0也有許多可以顯著提高性能的選擇. 

MPM(Multi -Processing Modules,多道處理模塊)是Apache2.0中影響性能的最核心特性. 

毫不誇張地說,MPM的引入是Apache 2.0最重要的變化.大家知道,Apache是基於模塊化的設計,而Apache 2.0更擴展了模塊化設計到Web服務器的最基本功能.服務器裝載了一種多道處理模塊,負責綁定本機網絡端口、接受請求,並調度子進程來處理請求.擴展模塊化設計有兩個重要好處: 

  ◆ Apache可以更簡潔、有效地支持多種操作系統; 

  ◆ 服務器可以按站點的特殊需要進行自定制. 

在用戶級,MPM看起來和其它Apache模塊非常類似.主要區別是在任意時刻只能有一種MPM被裝載到服務器中. 

下面以Linux RedHat AS3為平台,演示一下在Apache 2.0中如何指定MPM. 

# wget http://archive.apache.org/dist/httpd/httpd-2.0.52.tar.bz2 
# tar jxvf httpd-2.0.52.tar.bz2 
# cd httpd-2.0.52 
# ./configure --help|grep mpm 

顯示如下: --with-mpm=MPM Choose the process model for Apache to use. MPM={beos|worker|prefork|mpmt_os2| perchild|leader|threadpool} 

上述操作用來選擇要使用的進程模型,即哪種MPM模塊.Beos、mpmt_os2分別是BeOS和OS/2上缺省的MPM, perchild主要設計目的是以不同的用戶和組的身份來運行不同的子進程.這在運行多個需要CGI的虛擬主機時特別有用,會比1.3版中的SuExec 機制做得更好.leader和threadpool都是基於worker的變體,還處於實驗性階段,某些情況下並不會按照預期設想的那樣工作,所以 Apache官方也並不推薦使用.因此,我們主要闡述prefork和worker這兩種和性能關系最大的產品級MPM. 

prefork的工作原理 
  如果不用“--with-mpm”顯式指定某種MPM,prefork就是Unix平台上缺省的MPM.它所采用的預派生子進程方式也是 Apache 1.3中采用的模式.prefork本身並沒有使用到線程,2.0版使用它是為了與1.3版保持兼容性;另一方面,prefork用單獨的子進程來處理不同的請求,進程之間是彼此獨立的,這也使其成為最穩定的MPM之一. 
   prefork的工作原理是,控制進程在最初建立“StartServers”個子進程後,為了滿足MinSpareServers設置的需要創建一個進程,等待一秒鐘,繼續創建兩個,再等待一秒鐘,繼續創建四個……如此按指數級增加創建的進程數,最多達到每秒32個,直到滿足 MinSpareServers設置的值為止.這就是預派生(prefork)的由來.這種模式可以不必在請求到來時再產生新的進程,從而減小了系統開銷以增加性能. 

worker的工作原理 
   相對於prefork,worker是2.0 版中全新的支持多線程和多進程混合模型的MPM.由於使用線程來處理,所以可以處理相對海量的請求,而系統資源的開銷要小於基於進程的服務器.但是, worker也使用了多進程,每個進程又生成多個線程,以獲得基於進程服務器的穩定性.這種MPM的工作方式將是Apache 2.0的發展趨勢. 
   worker的工作原理是,由主控制進程生成“StartServers”個子進程,每個子進程中包含固定的ThreadsPerChild 線程數,各個線程獨立地處理請求.同樣,為了不在請求到來時再生成線程,MinSpareThreads和MaxSpareThreads設置了最少和最多的空閒線程數;而MaxClients設置了所有子進程中的線程總數.如果現有子進程中的線程總數不能滿足負載,控制進程將派生新的子進程. 

Copyright © Windows教程網 All Rights Reserved