Apache有三種穩定的工作模式,稱為多程序處理子產品MPM
1.Prefork工作模式
apache在啟動之初,就預先派生一些子程序,然後等待請求過來;每個子程序隻有一個線程,在一個時間點内,隻能處理一個請求。
優點:成熟穩定,相容所有子產品,線程安全性高
缺點:不适合處理高并發請求;一個程序相對占用更多的系統資源,消耗更多的記憶體

2.Worker工作模式
使用多程序和多線程的混合模式,也預先派生了幾個子程序(數量遠少于prefork派生的);每個子程序建立多個線程,包括一個監聽線程;每個請求會被配置設定一個線程來服務
優點:占據更少的記憶體(多個線程通常會共享父程序的記憶體),适合高并發的場景
缺點:必須考慮線程安全的問題,使用keep-alive長連接配接的時候,某個線程會被一直占用,即使沒有收到請求,需要等待到逾時才會釋放;一個線程出現問題也會導緻同一程序下的線程出現問題
keep-alive
在http早期,每個http請求都要求打開一個tcp socket連接配接,并且使用之後就斷開這個tcp連接配接;
設定keepalive_timeout之後,httpd守護程序便會等待浏覽器還有沒有請求,這個等待就是keepalive_timeout時間;如果在規定的等待時間内沒有收到浏覽器發來的http請求,則關閉這個http連接配接;
優點:減少tcp連接配接的建立次數;減少time_wait狀态連接配接;提高性能和提高httpd伺服器的吞吐率
缺點:長時間的tcp連接配接容易導緻系統資源無效占用;配置不當的keep-alive,比重複利用連接配接帶來的損失大
3.Event工作模式
類似于worker的工作模式,最大差別是它解決了keep-alive場景下,長期被占用的線程的資源的浪費問題;event模式下,會有一個專門的線程來管理這些keep-alive類型的線程,當有真實的請求過來的時候,将請求傳遞給服務線程,執行完畢又允許它釋放
優點:增強了高并發場景下的請求處理能力,減少tcp的連接配接數量
缺點:Event PMP不能在https通路下工作
檢視apache工作模式的方法:
httpd -V |grep -i "Server MPM"
指定的方式:
在編譯時使用 --with-mpm=xxx