web伺服器性能對比

2021-01-17 熱潮人生

Nginx才短短幾年,就拿下了Web伺服器大壁江山,眾所周知,Nginx在處理大並發靜態請求方面,效率明顯高於Httpd,甚至能輕鬆解決C10K問題。在高並發連接的情況下,Nginx是Apache伺服器不錯的替代品。Nginx同時也可以作為7層負載均衡伺服器來使用。根據我的測試結果,Nginx + PHP(FastCGI) 可以承受3萬以上的並發連接數,相當於同等環境下Apache的10倍。一般來說,4GB內存的伺服器+Apache(prefork模式)一般只能處理3000個並發連接,因為它們將佔用3GB以上的內存,還得為系統預留1GB的內存。我曾經就有兩臺Apache伺服器,因為在配置文件中設置的MaxClients為4000,當Apache並發連接數達到3800時,導致伺服器內存和Swap空間用滿而崩潰。而這臺 Nginx + PHP(FastCGI) 伺服器在3萬並發連接下,開啟的10個Nginx進程消耗150M內存(15M*10=150M),開啟的64個php-cgi進程消耗1280M內存(20M*64=1280M),加上系統自身消耗的內存,總共消耗不到2GB內存。如果伺服器內存較小,完全可以只開啟25個php-cgi進程,這樣php-cgi消耗的總內存數才500M。在3萬並發連接下,訪問Nginx+ PHP(FastCGI) 伺服器的PHP程序,仍然速度飛快。為什麼Nginx在處理高並發方面要優於httpd,我們先從兩種web伺服器的工作原理以及工作模式說起。一、Apache三種工作模式我們都知道Apache有三種工作模塊,分別為:prefork、worker、event。prefork:多進程,每個請求用一個進程響應,這個過程會用到select機制來通知。worker:多線程,一個進程可以生成多個線程,每個線程響應一個請求,但通知機制還是select不過可以接受更多的請求。event:基於異步I/O模型,一個進程或線程,每個進程或線程響應多個用戶請求,它是基於事件驅動(也就是epoll機制)實現的。1、prefork的工作原理如果不用「–with-mpm」顯式指定某種MPM,prefork就是Unix平臺上預設的MPM。它所採用的預派生子進程方式也是 Apache1.3中採用的模式。prefork本身並沒有使用到線程,2.0版使用它是為了與1.3版保持兼容性;另一方面,prefork用單獨的子進程來處理不同的請求,進程之間是彼此獨立的,這也使其成為最穩定的MPM之一。2、worker的工作原理相對於prefork,worker是2.0版中全新的支持多線程和多進程混合模型的MPM。由於使用線程來處理,所以可以處理相對海量的請求,而系統資源的開銷要小於基於進程的伺服器。但是,worker也使用了多進程,每個進程又生成多個線程,以獲得基於進程伺服器的穩定性,這種MPM的工作方 式將是Apache2.0的發展趨勢。3、event 基於事件機制的特性一個進程響應多個用戶請求,利用callback機制,讓套接字復用,請求過來後進程並不處理請求,而是直接交由其他機制來處理,通過epoll機制來通知請求是否完成;在這個過程中,進程本身一直處於空閒狀態,可以一直接收用戶請求。可以實現一個進程程響應多個用戶請求。支持持海量並發連接數,消耗更少的資源。二、如何提高Web伺服器的並發連接處理能力有幾個基本條件:1、基於線程,即一個進程生成多個線程,每個線程響應用戶的每個請求。2、基於事件的模型,一個進程處理多個請求,並且通過epoll機制來通知用戶請求完成。3、基於磁碟的AIO(異步I/O)4、支持mmap內存映射,mmap傳統的web伺服器,進行頁面輸入時,都是將磁碟的頁面先輸入到內核緩存中,再由內核緩存中複製一份到web伺服器上,mmap機制就是讓內核緩存與磁碟進行映射,web伺服器,直接複製頁面內容即可。不需要先把磁碟的上的頁面先輸入到內核緩存去。剛好,Nginx 支持以上所有特性。所以Nginx官網上說,Nginx支持50000並發,是有依據的。三、Nginx優異之處傳統上基於進程或線程模型架構的Web服務通過每進程或每線程處理並發連接請求,這勢必會在網絡和I/O操作時產生阻塞,其另一個必然結果則是對內存或CPU的利用率低下。生成一個新的進程/線程需要事先備好其運行時環境,這包括為其分配堆內存和棧內存,以及為其創建新的執行上下文等。這些操作都需要佔用CPU,而且過多的進程/線程還會帶來線程抖動或頻繁的上下文切換,系統性能也會由此進一步下降。另一種高性能web伺服器/Web伺服器反向代理:Nginx,Nginx的主要著眼點就是其高性能以及對物理計算資源的高密度利用,因此其採用了不同的架構模型。受啟發於多種作業系統設計中基於「事件」的高級處理機制,Nginx採用了模塊化、事件驅動、異步、單線程及非阻塞的架構,並大量採用了多路復用及事件通知機制。在Nginx中,連接請求由為數不多的幾個僅包含一個線程的進程Worker以高效的迴環(run-loop)機制進行處理,而每個Worker可以並行處理數千個的並發連接及請求。四、Nginx 工作原理Nginx會按需同時運行多個進程:一個主進程(master)和幾個工作進程(worker),配置了緩存時還會有緩存加載器進程(cache loader)和緩存管理器進程(cache manager)等。所有進程均是僅含有一個線程,並主要通過「共享內存」的機制實現進程間通信。主進程以root用戶身份運行,而worker、cache loader和cache manager均應以非特權用戶身份運行。在高連接並發的情況下,Nginx是Apache伺服器不錯的替代品。Nginx 安裝非常的簡單 , 配置文件非常簡潔(還能夠支持perl語法),Bugs 非常少的伺服器: Nginx 啟動特別容易, 並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動. 你還能夠 不間斷服務的情況下進行軟體版本的升級 。五、Nginx 的誕生主要解決C10K問題最後我們從各自使用的多路復用IO模型來分析:1、select模型:(apache使用,由於受模塊等限制,用的不多);單個進程能夠 監視的文件描述符的數量存在最大限制;select()所維護的 存儲大量文件描述符的數據結構 ,隨著文件描述符數量的增長,其在用戶態和內核的地址空間的複製所引發的開銷也會線性增長;由於網絡響應時間的延遲使得大量TCP連接處於非活躍狀態,但調用select()還是會對 所有的socket進行一次線性掃描 ,會造成一定的開銷;2、poll:poll是unix沿用select自己重新實現了一遍,唯一解決的問題是poll 沒有最大文件描述符數量的限制;3、epoll模型:(Nginx使用)epoll帶來了兩個優勢,大幅度提升了性能:(1)基於事件的就緒通知方式 ,select/poll方式,進程只有在調用一定的方法後,內核才會對所有監視的文件描述符進行掃描,而epoll事件通過epoll_ctl()註冊一個文件描述符,一旦某個文件描述符就緒時,內核會採用類似call back的回調機制,迅速激活這個文件描述符,epoll_wait()便會得到通知(2)調用一次epoll_wait()獲得就緒文件描述符時,返回的並不是實際的描述符,而是一個代表就緒描述符數量的值,拿到這些值去epoll指定的一個數組中依次取得相應數量的文件描述符即可,這裡使用內存映射(mmap)技術, 避免了複製大量文件描述符帶來的開銷(3)當然epoll也有一定的局限性, epoll只有Linux2.6才有實現 ,而其他平臺都沒有,這和apache這種優秀的跨平臺伺服器,顯然是有些背道而馳了。(4)簡單來說epoll是select的升級版,單進程管理的文件描述符沒有最大限制。但epoll只有linux平臺可使用。作為跨平臺的Apache沒有使用

相關焦點

  • WindowServer2003伺服器搭建WEB伺服器
    首先選擇伺服器硬體品牌和伺服器作業系統,一、下面首先介紹一下伺服器作業系統。 WindowsServer2003是微軟於2003年4月底上市發行的伺服器作業系統,分為幾個不同的版本,具有不同的功能和用途。
  • 如何配置web伺服器
    如何配置web伺服器?在伺服器上配置Web服務,首先需要安裝網絡環境,然後上傳web項目文件,在配置web服務時,有一些安全策略也要注意。1 啟用日誌記錄功能Web伺服器應配置日誌功能,對用戶登錄進行記錄,記錄內容包括用戶登錄使用的帳號、登錄是否成功、登錄時間以及遠程登錄時用戶使用的IP位址。
  • 科普應用伺服器,與Web伺服器有啥區別?
    【IT168 資訊】它位於網絡和資料庫之間,那麼應用伺服器實際上是做什麼的?應用程式伺服器是為應用程式提供業務邏輯的代碼。它是基於組件的,位於以伺服器為中心的架構的中間層。這個架構主要基於Web。中間層是業務邏輯所在的應用伺服器。而第三層,則是事務伺服器的資料庫。
  • 你知道網際網路有哪些常用的web伺服器嗎?看有沒有你的常用的
    說到做網站你知道的web伺服器有哪些呢?一般網際網路上的網站都是採用哪些web伺服器呢?首先我們來了解下什麼是web伺服器, 顧名思義Web 伺服器就是提供web服務的伺服器,也可以叫 web server 比如我們經常用到的搜尋引擎百度就是一個典型的web伺服器例子。
  • 對常見的WEB伺服器和應用伺服器的介紹
    在選擇使用WEB伺服器應考慮的本身特性因素有:性能、安全性、日誌和統計、虛擬主機、代理伺服器、緩衝服務和集成應用程式等,下面介紹幾種常用的WEB伺服器。IIS是一種Web服務組件,其中包括Web伺服器、FTP伺服器、NNTP伺服器和SMTP伺服器,分別用於網頁瀏覽、文件傳輸、新聞服務和郵件發送等方面,它使得在網絡(包括網際網路和區域網)上發布信息成了一件很容易的事。它提供ISAPI(Intranet Server API)作為擴展Web伺服器功能的編程接口;同時,它還提供一個Internet資料庫連接器,可以實現對資料庫的查詢和更新。
  • 深入研究嵌入式web伺服器視頻監控的應用
    嵌入式web技術是視頻監控系統設計應用最廣泛的技術之一。本文根據監控系統對敖據吞吐量和安全可靠性等各方面的實際要求,結合相關研究的新進展,深入討論了web伺服器在監控系統設計中的應用技巧,並詳細做了實現上的闡述。對所有基於嵌入式web技術的監控系統的設計具有非常實際的指導作用。
  • 基於Android的嵌入式Web伺服器設計
    本文主要論述了基於Android系統環境,在家庭網關中實現嵌入式Web伺服器的設計方法,介紹了i-jetty嵌入式Web伺服器,及其Web應用功能的實現。2 系統設計 在嵌入式系統中,主控制晶片的選擇對於整個系統性能和良好運行有著至關重要的影響,在選擇主控晶片的過程中,需綜合考慮晶片自身的性能、兼容性、價格以及後續的升級等因素。綜合考慮以上因素,本文設計的家庭網關採用了Cortex—A8處理器作為硬體平臺。
  • 國產開源web伺服器kangle 穩定版2.6.1
    kangle web伺服器是一款國產開源的高性能web伺服器和反向代理伺服器軟體;帶有簡單操作的web控制臺。
  • kangle 3.4.8 發布,國產開源 Web 伺服器
    kangle web伺服器是一款國產開源的高性能web伺服器和反向代理伺服器軟體;集成簡單易操作的web控制臺。
  • 應用伺服器是什麼_應用伺服器有哪些
    動態   動態:動態web文檔不是以一個預先定義的格式存在,而是在瀏覽器訪問web伺服器時創建。當一個請求到達時,web伺服器運行一個應用程式創建動態文檔(dynamic documents),伺服器返回程序的輸出作為應答。由於每次訪問都要創建新的文檔,動態文檔的內容是變化的。
  • 國產開源web伺服器kangle 2.4.2 發布
    kangle web伺服器是一款集成asp/asp.net(windows版)的易操作管理的國產開源的高性能web伺服器和反向代理伺服器軟體。
  • Apache和IIS及nginx三大web伺服器,新手站長該如何選擇?
    網站上線時第一件事就是搭建運行環境,首先要選擇的就在伺服器上使用哪一個web伺服器,現在win系統默認自帶IIS而Linux則自帶Apache,如果需要使用nginx則需要單獨安裝。困擾新手站長的就是web服務到底該使用哪一個,目前流行的3大web伺服器有哪些優劣請看使用經驗。
  • 通付盾Web爬蟲防火牆與中科曙光伺服器成功完成國產化適配
    近日,通付盾最新升級的網絡應用安全防護產品「通付盾爬蟲防火牆軟體」與中科曙光H系列伺服器完成兼容適配聯合測試,適配檢測結果顯示,通付盾爬蟲防火牆軟體在兼容性、可靠性、穩定性及軟體性能等方面均以優異的成績達到適配標準,滿足用戶應用需求。
  • 一種嵌入式Web伺服器的設計方案
    本文主要介紹了嵌入式Web伺服器設計方案,以及實現和主要應用。1.引言嵌入式Web伺服器(Embedded Web Server,EWS)是指將Web伺服器嵌入到現場測試和控制設備中,在相應的硬體平臺和軟體系統的支持下,使傳統的測試和控制設備轉變為具備了以TCP/IP為底層通信協議,Web技術為核心的基於網際網路的網絡測試和控制設備。
  • Web前端和後端有什麼區別(上)
    ,了解yahoo的性能優化建議,並可以在項目中有效實施。 三、web後端和前端是怎麼連接的? 1、Web伺服器(apache, tomcat等),網絡協議(http, socket等),瀏覽器(chrome, FF, IE等)。
  • 用Scala實現簡單的Web和API伺服器
    【CSDN 編者按】大家都知道Web和API伺服器在網際網路中的重要性,在計算機網絡方面提供了最基本的界面。本文主要介紹了怎樣利用Scala實現實時聊天網站和API伺服器,通過本篇文章,你定將受益匪淺。這篇文及章的目的是介紹怎樣用Scala實現簡單的HTTP伺服器,從而提供網頁服務,以響應API請求。我們會建立一個簡單的聊天網站,可以讓用戶發表聊天信息,其他訪問網站的用戶都可以看見這些信息。為簡單起見,我們將忽略認證、性能、用戶掛曆、資料庫持久存儲等問題。
  • 淘寶Web伺服器Tengine正式開源:Nginx定製版
    站長之家(chinaz.com)12月5日報導:日前,由淘寶核心系統團隊定製和開發的淘寶Web伺服器Tengine正式開源,並對外提供下載。
  • _Intel伺服器CPU_伺服器評測...
    凌動S1200系列 主要針對微伺服器和其他以性能為導向、功耗較低的應用。<http://ark.intel.com/products/71267>(S1200 系列的高端產品)的簡要對比情況。
  • 超級樞紐DWeb4.0 BitDNS顛覆分布式網際網路強勢入場
    Karen強調說,BitDNS的去中心化伺服器與BTC/ETH的礦機不同,這些伺服器不是做無用的Hash碰撞計算;與EOS/TRON的DPOS節點伺服器也不同,這些伺服器不是為基礎鏈的共識和交易執行服務的。BitDNS的伺服器是為DApp這樣的上層應用服務的,用於替換DApp目前大量使用的雲伺服器。
  • 軟體測試中的性能測試 負載測試 壓力測試
    那麼這個就是軟體性能測試。通常使用性能測試工具對軟體開展並發的訪問,同時監控系統各項指標,比如CPU、內存、網絡、磁碟等關鍵部件的使用情況。目標是發現軟體在大用戶量的情況下,系統的工作情況。性能測試是負載測試、壓力測試、並發測試的統稱。