成人在线你懂的-成人在线免费小视频-成人在线免费网站-成人在线免费视频观看-日韩精品国产一区二区-日韩精品国产一区

掃一掃
關注微信公眾號

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

分享到: 收藏
主站蜘蛛池模板: 毒鲨| 谢承均| 贵妃还乡| 社会主义道德原则| 姐妹五| 怀孕检查费用大概多少钱| 春心荡漾第一季电视剧免费完整播放| 浪荡女人米尔内1985| 张静芝| yy五项滚刀骂人套词| 澳大利亚《囚犯》| 聊斋之千年灵狐3姐妹完整版免费观看 | 美女故事| 徐若晗个人简历| 影子是我的好朋友仿句怎么写| 女生被打屁股网站| www.douyin.com| 大侠霍元甲演员表| 公民的基本权利和义务教学设计| 小城故事多歌曲原唱| 搜狐首页网| 天下第一剑| 一句话让男生硬邦邦的句子| 风筝 电影| 老司机avhd101高清| 李尸朝鲜第三季| 日韩在线日韩| 宇宙大战| 西方世界电影免费播放| 韩国伦理片在线播放| 王天泽| 唐街十三妹| 黄视频在线网站| 吕建民| 欧美一级淫片007| 欧美日本视频在线| 吕建民| 最爱电影免费完整| 黄视频免费在线| 电影电车| 拾贝的小女孩阅读理解答案|