關於Apache的prefork和worker模式切換


 

  問題

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

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

  如何在二者間切換?

 解決方案

  Apache HTTP服務器被設計爲一個強大的、靈活的能夠在多種平臺以及不同環境下工作的服務器。

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

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

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

  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認證相關的問題)。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章