Centos7之Apache的三種工做模式

Apache工做模式簡介

Apache 2.X 支持插入式並行處理模塊,稱爲多進程處理模塊(MPM)。在編譯apache時必須選擇也只能選擇一個MPM,對類UNIX系統,有幾個不一樣的MPM可供選擇,它們會影響到apache的速度和可伸縮性。apache

Apache的三種工做模式

一、prefork模式

prefork是一個非線程型的、預派生的MPM,使用多個進程,每一個進程在某個肯定的時間只單獨處理一個鏈接,效率高,但內存使用比較大。
Centos7之Apache的三種工做模式安全

優勢:

適合於沒有線程安全庫,須要避免線程兼容性問題的系統。它是要求將每一個請求相互獨立的狀況下最好的MPM,這樣若一個請求出現問題就不會影響到其餘請求。服務器

缺點:

一個進程相對佔用更多的系統資源,消耗更多的內存。並且,它並不擅長處理高併發請求,在這種場景下,它會將請求放進隊列中,一直等到有可用進程,請求才會被處理。網絡

二、worker模式

worker使用了多進程和多線程的混合模式,worker模式也一樣會先預派生一些子進程,而後每一個子進程建立一些線程,同時包括一個監聽線程,每一個請求過來會被分配到一個線程來服務。
Centos7之Apache的三種工做模式多線程

優勢:

線程比起進程會更輕量,由於線程是經過共享父進程的內存空間,所以,內存的佔用會減小一些,在高併發,高流量的場景下會比prefork有更多可用的線程,表現會更優秀一些。併發

缺點:

若是一個線程出現了問題也會致使同一進程下的線程出現問題,若是是多個線程出現問題,也只是影響Apache的一部分,而不是所有。因爲用到多進程多線程,須要考慮到線程的安全了,在使用keep-alive長鏈接的時候,某個線程會一直被佔用,即便中間沒有請求,須要等待到超時纔會被釋放(prefork模式也有這個問題)。ide

注:Worker模式下所能同時處理的請求總數是由子進程總數乘以ThreadsPerChild 值決定的,應該大於等於MaxRequestWorkers。若是負載很大,現有的子進程數不能知足時,控制進程會派生新的子進程。默認最大的子進程總數是16,加大時 也須要顯式聲明ServerLimit(最大值是20000)。須要注意的是,若是顯式聲明瞭ServerLimit,那麼它乘以 ThreadsPerChild的值必須大於等於MaxRequestWorkers,並且MaxRequestWorkers必須是ThreadsPerChild的整數倍,不然 Apache將會自動調節到一個相應值。高併發

三、Event模式

Apache最新的工做模式,它和worker模式很像。
Centos7之Apache的三種工做模式優化

優勢:

不一樣的是在於它解決了keep-alive長鏈接的時候佔用線程資源被浪費的問題(HTTP的Keepalive方式能減小TCP鏈接數量和網絡負載),在event工做模式中,會有一些專門的線程用來管理這些keep-alive類型的線程,當有真實請求過來的時候,將請求傳遞給服務器的線程,執行完畢後,又容許它釋放。這加強了在高併發場景下的請求處理網站

缺點:

event MPM在遇到某些不兼容的模塊時,會失效,將會回退到worker模式,一個工做線程處理一個請求。官方自帶的模塊,所有是支持event MPM的。注意一點,event MPM須要Linux系統(Linux 2.6+)對EPoll的支持,才能啓用。

注:HTTPS的鏈接(SSL),它的運行模式仍然是相似worker的方式,線程會被一直佔用,知道鏈接關閉。部分比較老的資料裏,說event MPM不支持SSL,那個說法是幾年前的說法,如今已經支持了。

Apache三種工做模式的使用

一、使用yum或者rpm安裝httpd

注:默認使用的是prefork工做模式。

vi /etc/httpd/conf.modules.d/00-mpm.conf
Centos7之Apache的三種工做模式
注:Centos7修改apache工做模式,直接將前邊註釋去掉便可,切記將不用的也要註釋掉!

二、源碼安裝httpd

兩種編譯方式指定參數

方式一:

指定具體工做模式--with-mpm=prefork/worker/event

注:真實環境指定後邊其中一種便可!

方式二:

指定同時支持三種工做模式--enable-mpms-shared=all

注:建議使用這種,防止後期根據業務優化網站減小麻煩!

相關文章
相關標籤/搜索