httpd的特性:html
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不支持同時編譯多個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