關於Apache的prefork和worker模式切換


 

  問題php

  在Prima/Plesk/Virtuozzo上,apache都使用了系統自帶的httpd-2.0.5x的rpm包linux

  在redhat linux上,默認使用的是prefork模式,而不是worker模式web

  如何在兩者間切換?apache

 解決方案服務器

  Apache HTTP服務器被設計爲一個強大的、靈活的可以在多種平臺以及不一樣環境下工做的服務器。網絡

  不一樣的平臺和不一樣的環境常常產生不一樣的需求,或是爲了達到一樣的最佳效果而採用不一樣的方法。多線程

  Apache憑藉它的模塊化設計很好的適應了大量不一樣的環境。併發

  這一設計使得網站管理員可以在編譯時和運行時憑藉載入不一樣的模塊來決定服務器的不一樣附加功能。ide

  Apache2.0將這種模塊化的設計延伸到了web服務器的基礎功能上。模塊化

  這個版本帶有多路處理模塊(MPM)的選擇以處理網絡端口綁定、

  接受請求並指派子進程來處理這些請求。

  好比,須要更好伸縮性的能夠選擇象worker或event這樣線程化的MPM,

  而須要更好的穩定性和兼容性以適應一些舊的軟件能夠用prefork 。

  在Redhat Linux的主要版本as4上,apache版本爲httpd-2.0.5x,

  默認爲prefork模式,主要是考慮到穩定性的緣由。

  要切換到worker模式,則須要登陸到linux上,進行以下操做:

  進入/usr/sbin目錄

  cd /usr/sbin

  將當前的prefork模式啓動文件更名

  mv httpd httpd.prefork

  將worker模式的啓動文件更名

  mv httpd.worker httpd

  修改配置文件vi /etc/httpd/conf/httpd.conf

  找到裏邊的以下一段,可適當修改負載等參數:

  

  StartServers 5
   ThreadLimit 200
   ServerLimit 50
   MaxClients 2000
   MinSpareThreads 25
   MaxSpareThreads 200
   ThreadsPerChild 100
   MaxRequestsPerChild  50

  

  從新啓動服務

  /etc/init.d/httpd restart

  便可換成worker方式啓動apache2

總結:

1. prefork 中沒有線程的概念,是多進程模型,一個進程處理一個鏈接;穩定;響應快。其缺點是在鏈接數比較大時就很是消耗內存。

2. worker 是多進程多線程模型,一個進程有多個線程,每一個線程處理一個鏈接。與prefork相比,worker模式更節省系統的內存資源。不過,須要注意worker模式下的Apache與php等程序模塊的兼容性。

3. event 是worker模式的變種,它把服務進程從鏈接中分離出來,在開啓KeepAlive場合下相對worker模式可以承受的了更高的併發負載。event模式不能很好的支持https的訪問(HTTP認證相關的問題)。

相關文章
相關標籤/搜索