Apache-httpd工作模型

httpd

  httpd是由apache軟件基金會開發的一款著名的web服務器軟件。由于其開放源代碼,并且擁有跨平臺、功能強大、安全穩定等特性,而被廣泛使用。早期httpd是在修修補補的基礎上成長起來的,所以早期也叫作a pachey server,由于開發httpd的組織叫作apache,因此httpd也被稱作apache。httpd有三個長線維護版本,分別是httpd2.0、httpd2.2和httpd2.4。使用最為廣泛的還是2.2和2.4的版本,雖然兩個版本看起來數字相差不大,但是這兩個版本改變還是挺大。
  httpd支持許多特性,大部分特性都是通過編譯模塊實現,因此httpd是以核心加模塊組成的方式工作。httpd的模塊分兩種,一種叫作動態可裝載模塊(DSO),另一種叫作多道處理模塊(MPM)。DSO動態可裝模塊每個模塊對應httpd的某項功能,也就是我們廣泛意義上理解的功能模塊。但是,MPM多道處理模塊和DSO不一樣,它并不是指一種模塊,它代表的是httpd的一種工作特性,常用的MPM有,prefork、worker、event。

h1.png

httpd的三種MPM模式

1、Prefork

  prefork模式可以算是很古老但是非常穩定的Apache模式。Apache在啟動之初,就預先fork一些子進程,然后等待請求進來。之所以這樣做,是為了減少頻繁創建和銷毀進程的開銷。每個子進程只有一個線程,在一個時間點內,只能處理一個請求。

h2.jpg

  • 優點:成熟穩定,兼容所有新老模塊。同時,不需要擔心線程安全的問題。

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

prefork各參數說明:

h3.png

2、Worker

  和prefork模式相比,worker使用了多進程和多線程的混合模式,worker模式也同樣會先預派生一些子進程,然后每個子進程創建一些線程,同時包括一個監聽線程,每個請求過來會被分配到一個線程來服務。線程比起進程會更輕量,因為線程是通過共享父進程的內存空間,因此,內存的占用會減少一些,在高并發的場景下會比prefork有更多可用的線程,表現會更優秀一些。

h4.jpg

  • 優點:占據更少的內存,高并發下表現更優秀。

  • 缺點:必須考慮線程安全的問題,因為多個子線程是共享父進程的內存地址的。如果使用keep-alive的長連接方式,某個線程會一直被占據,也許中間幾乎沒有請求,需要一直等待到超時才會被釋放。如果過多的線程,被這樣占據,也會導致在高并發場景下的無服務線程可用。

worker各參數說明:

h5.png

3、Event

  這是Apache最新的工作模式,它和worker模式很像,不同的是在于它解決了keep-alive長連接的時候占用線程資源被浪費的問題,在event工作模式中,會有一些專門的線程用來管理這些keep-alive類型的線程,當有真實請求過來的時候,將請求傳遞給服務器的線程,執行完畢后,又允許它釋放。這增強了在高并發場景下的請求處理。

h6.jpg

  • event MPM在遇到某些不兼容的模塊時,會失效,將會回退到worker模式,一個工作線程處理一個請求。官方自帶的模塊,全部是支持event MPM的

event參數說明:

h7.png

結語:httpd的MPM模塊通常用來應對各種生產環境的情況,在生產環境中web服務器的訪問量并不是一成不變的,所以有的時候我們可能需要修改相關參數來應對各種訪問量。

 

原創文章,作者:641348038@qq.com,如若轉載,請注明出處:http://www.www58058.com/68083

(0)
641348038@qq.com641348038@qq.com
上一篇 2017-02-15
下一篇 2017-02-15

相關推薦

  • bash特性及bash腳本編程初步

    終端,附著在終端的接口程序: GUI:KDE, GNome, Xfce CLI:/etc/shells bash zsh fish   bash的特性: 命令行展開:~, {} 命令別名:alias, unalias 命令歷史:history 文件名通配:glob 快捷鍵:Ctrl+a, e, u, k, l 命令補全:$PATH 路徑補全: &n…

    Linux干貨 2016-11-21
  • 文件查找命令find

      在文件系統上常常需要根據文件的各種屬性去查找符合條件的文件。在Linux下也有相當優異的查找命令。今天只要將find和locate。find通常不常用,因為速度慢!通常我們先使用locate來進行模糊查找,如果真找不到了,才以find來查找。為什么呢?因為locate是利用數據庫來查找數據,所以速度非???,而且并沒有實際查詢硬盤比較省時間。 l…

    Linux干貨 2016-08-22
  • LVS-fwm&persistence

    Evernote Export 1、LVS-fwm fwm:FireWall Mark        在netfilter上給報文打標記;mangle表;        ipvsadm -A|E -t|u|f service-address [-s scheduler] &nbs…

    Linux干貨 2016-12-01
  • Iptables基礎

       Firewall:防火墻,工作于主機或網絡的邊緣處,對于進出本主機或網絡的報文根據事先定義好的檢查規則左匹配檢測,對于能夠被規則所匹配到的報文進行相應的處理的組件。   防火墻可分為:硬件防火墻,在硬件級別實現部分功能的防火墻;軟件防火墻,應用軟件處理邏輯運行于通用硬件平臺之上的防火墻;主機防火墻,服務范圍為當前主機;網絡…

    2017-06-19
  • shell腳本編程之函數、case語句

    一、函數 調用函數前必須先定義,調用時僅使用函數名即可。 語法: function  函數名 {      函數體 } 也可表示為: 函數名 () { 函數體 } 示例:寫一個腳本,判定網絡內有哪些主機在線,在線的用綠色顯示,不在線的用紅示表示: c_net&…

    Linux干貨 2015-08-24
  • linux時間

    linux有兩個時間:     系統時間和硬件時間 系統時間: 最簡單的使用date命令顯示當前系統的時間,命令行輸入date。 # date Thu Jun  2 17:11:48 CST 2016 date的具體使用方式:     1. date格式顯示:date …

    Linux干貨 2016-06-03

評論列表(1條)

  • luoweiro
    luoweiro 2017-02-22 22:49

    對于apache工作模型介紹的非常詳細,尤其是配置方面的知識,非常贊。

欧美性久久久久