亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關注微信公眾號

Apache: MPM的引入帶來性能改善1
2007-08-14   中國IT實驗室

Apache 2.0在性能上的改善最吸引人。在支持POSIX線程的Unix系統上,Apache可以通過不同的MPM運行在一種多進程與多線程相混合的模式下,增強部分配置的可擴充性能。相比于Apache 1.3,2.0版本做了大量的優化來提升處理能力和可伸縮性,并且大多數改進在默認狀態下即可生效。但是在編譯和運行時刻,2.0也有許多可以顯著提高性能的選擇。本文不想敘述那些以功能換取速度的指令,如HostnameLookups等,而只是說明在2.0中影響性能的最核心特性:MPM(Multi-Processing Modules,多道處理模塊)的基本工作原理和配置指令。

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

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

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

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

  指定MPM的方法

  下面以Red Hat Linux 9為平臺,說明在Apache 2.0中如何指定MPM (Apache采用2.0.45)。先解壓縮源代碼包httpd-2.0.45.tar.gz,生成httpd-2.0.45目錄(Apache 1.3源代碼包的命名規則是apache_1.3.NN.tar.gz,而2.0版則是httpd-2.0.NN.tar.gz,其中NN是次版本號)。

  進入httpd-2.0.45目錄,運行以下代碼:

  $ ./configure --help|grep mpm
  顯示如下:--with-mpm=MPMChoose 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 ( 有關其它的MPM詳細說明,請參見Apache官方文檔:http://httpd.apache.org/docs-2.0/mod/)。

  prefork的工作原理及配置

  如果不用“--with-mpm”顯式指定某種MPM,prefork就是Unix平臺上缺省的MPM。它所采用的預派生子進程方式也是Apache 1.3中采用的模式。prefork本身并沒有使用到線程,2.0版使用它是為了與1.3版保持兼容性;另一方面,prefork用單獨的子進程來處理不同的請求,進程之間是彼此獨立的,這也使其成為最穩定的MPM之一。

  若使用prefork,在make編譯和make install安裝后,使用“httpd -l”來確定當前使用的MPM,應該會看到prefork.c(如果看到worker.c說明使用的是worker MPM,依此類推)。再查看缺省生成的httpd.conf配置文件,里面包含如下配置段:<IfModule prefork.c>
  StartServers 5
  MinSpareServers 5
  MaxSpareServers 10
  MaxClients 150
  MaxRequestsPerChild 0
  </IfModule>

  prefork的工作原理是,控制進程在最初建立“StartServers”個子進程后,為了滿足MinSpareServers設置的需要創建一個進程,等待一秒鐘,繼續創建兩個,再等待一秒鐘,繼續創建四個……如此按指數級增加創建的進程數,最多達到每秒32個,直到滿足MinSpareServers設置的值為止。這就是預派生(prefork)的由來。這種模式可以不必在請求到來時再產生新的進程,從而減小了系統開銷以增加性能。

  MaxSpareServers設置了最大的空閑進程數,如果空閑進程數大于這個值,Apache會自動kill掉一些多余進程。這個值不要設得過大,但如果設的值比MinSpareServers小,Apache會自動把其調整為MinSpareServers+1。如果站點負載較大,可考慮同時加大MinSpareServers和MaxSpareServers。

  MaxRequestsPerChild設置的是每個子進程可處理的請求數。每個子進程在處理了“MaxRequestsPerChild”個請求后將自動銷毀。0意味著無限,即子進程永不銷毀。雖然缺省設為0可以使每個子進程處理更多的請求,但如果設成非零值也有兩點重要的好處:

  ◆ 可防止意外的內存泄漏;

  ◆ 在服務器負載下降的時侯會自動減少子進程數。

  因此,可根據服務器的負載來調整這個值。筆者認為10000左右比較合適。

熱詞搜索:

上一篇:不刻盤運行Knoppix:將Knoppix植入硬盤2
下一篇:Apache: MPM的引入帶來性能改善2

分享到: 收藏