二、Apache(httpd)之一 三種工做模式

httpd的特性:html

  • 高度模塊化:core + modules
  • 模塊化設計DSO:Dynamic Shared Object
  • MPM:Multipath Processing Modules 多路處理模塊

 

perfork MPM:多進程模型,每一個進程響應一個請求  (併發模型不能超過1024個)服務器

   一個主進程:負責生成子N個子進程及回收子進程,每一個子進程處理一個用戶請求;即使沒有用戶請求,也會預先生成多個空閒進程,隨時等待請求到達;最大不會超過1024個。負責建立套接字,負責接收請求並將其派發給某子進程進行處理;
   n個子進程:每一個子進程處理一個請求;
   工做模型:會預先生成N個空閒進程,隨時等待用於響應用戶請求。      多線程

prefork的默認配置(httpd2.2)
<IfModule prefork.c>
    StartServers       8     #進程啓動後當即啓動的空閒進程數量
    MinSpareServers    5     #最小空閒進程數量
    MaxSpareServers   20     #最大空閒進程數量
    ServerLimit       256    #一個週期內容許最大的進程數量
    MaxClients        256    #最大容許啓動的服務器子進程數量
    MaxRequestsPerChild  4000   #容許最大請求的數量(超過數量就會關閉該進程,設置爲0則永不過時)
</IfModule>

 

worker MPM 多線程模型(多進程生成,一個進程生成多個線程)每一個線程處理一個用戶請求併發

    一個主進程:負責生成子進程,建立套接字;負責接收請求,並將其派發給某子進程進行處理;
    n個子進程:每一個子進程負責生成多個線程;
    每一個線程:負責響應用戶請求,其併發響應數量爲:m*n (m:子進程數量;n:每一個子進程所能建立的最大線程數量)。模塊化

worker的默認配置(httpd2.2)
<IfModule worker.c>
    StartServers         3
    MaxClients         300
    MinSpareThreads     25
    MaxSpareThreads     75
    ThreadsPerChild     25   #每一個子進程所能建立的最大線程數量
    MaxRequestsPerChild  0   #0表示不限制
</IfModule>

event  MPM :事件驅動模型(多進程模式),每一個進程響應多個請求測試

   一個主進程 :負責生成子進程,負責建立套接字,負責接收請求並將其派發給某子進程進行處理
  n個子進程:基於事件驅動機制直接響應多個請求,其併發響應數量爲:m*n (m:子進程數量;n:每一個子進程響應的請求數量)。spa

<IfModule mpm_event_module>(httpd2.4)
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>
附:httpd2.2默認沒有給出event模型的配置內容,但從測試運行的結果來看,配置應該同worker模型接近。

對比httpd2.2和httpd2.4

  ①httpd2.2不支持同時編譯多個MPM模塊,只能在編譯時選定要使用哪一個,爲此rpm包提供了三個應用程序文件:httpd(prefork), httpd.worker, httpd.event,分別用於實現對不一樣的MPM機制的支持;默認使用的模塊爲/usr/sbin/httpd,其爲prefork的MPM模塊。線程

    若是要更改MPM,直接修改配置文件/etc/sysconfig/httpd設計

        HTTPD=/usr/sbin/httpd.{worker,event}rest

    修改後重啓服務service httpd restart,此時可經過 ps aux | grep httpd 或 htttpd -M | grep mpm查看是否更換成功。

  ②httpd2.4支持動態編譯多個MPM模塊,若是要更換MPM,修改配置文件 /etc/httpd/conf.modules.d/00-pmp.conf

        LoadModule mpm_{worker,event}_module modules/mod_mpm_{worker,event}.so

    修改後重啓服務systemctl restart httpd.service,此時可經過 ps aux | grep httpd或 htttpd -M | grep mpm查看是否更換成功。

 

附:httpd2.4.6沒有直接給出3種mpm的默認配置,可是經過/usr/share/doc/httpd-2.4.6/httpd-mpm.conf文件能夠查看到相關的配置;若是咱們想修改配置可參考文檔修改/etc/httpd/conf/httpd.conf文件便可。此處我修改了worker mpm,內容以下:

httpd2.4切換成worker模型,須要修改配置文件/etc/httpd/conf.modules.d/00-mpm.conf,內容以下:

  從新啓動httpd服務,發現有7條線程;即便是默認的配置也是會多出1條線程,沒有找到緣由:

 

併發服務器響應請求:

  單進程I/O模型

  多進程I/O模型

  複用的I/O模型:多線程模型和事件驅動

  利用的多進程I/O模型

https://www.cnblogs.com/walk1314/p/9112249.html

相關文章
相關標籤/搜索