Apache、nginx 、lighttpd性能比較

1. web服務器簡介

1. lighttpd

     Lighttpd是一個德國人領導的開源軟件,其根本的目的是提供一個專門針對高性能網站,安全、快速、兼容性好并且靈活的Web server環境   

     Lighttpd是一個具有非常低的內存開銷,cpu占用率低,效能好,以及豐富的模塊等特點。lighttpd是眾多OpenSource輕量級的web server中較為優秀的一個。支持FastCGI, CGI, Auth, 輸出壓縮(output compress), URL重寫, Alias等重要功能。

     而Apache之所以流行,很大程度也是因為功能豐富,在Lighttpd 上很多功能都有相應的實現了,這點對于Apache的用戶是非常重要的,因為遷
移到Lighttpd就必須面對這些問題。

    Lighttpd使用fastcgi方式運行php,它會使用很少的PHP進程響應很大的并發量。其fastCGI進程管理器一般使用spawn-fcgi

2.apache

    apache是世界排名第一的web服務器, 根據netcraft(www.netsraft.co.uk)所作的調查,世界上百分之五十以上的web服務器在使用apache.

1995年4月, 最早的apache(0.6.2版)由apache group公布發行. apache group 是一個完全通過internet進行運作的非盈利機構, 由它來決定apache web服務器的標準發行版中應該包含哪些內容. 準許任何人修改隱錯, 提供新的特征和將它移植到新的平臺上, 以及其它的工作. 當新的代碼被提交給apache group時, 該團體審核它的具體內容, 進行測試, 如果認為滿意, 該代碼就會被集成到apache的主要發行版中.

    它有優勢主要在于源代碼開放、有一支開放的開發隊伍、支持跨平臺的應用(可以運行在幾乎所有的Unix、Linux、Windows系統平臺之上)。Apache的模塊支持非常豐富,以至于它提供了非常完善的功能。

     apache 的特性:

   1) 幾乎可以運行在所有的計算機平臺上.

   2) 支持最新的http/1.1協議

   3) 簡單而且強有力的基于文件的配置(httpd.conf).

   4) 支持通用網關接口(cgi)

   5) 支持虛擬主機.

   6) 支持http認證.

   7) 集成perl.

   8) 集成的代理服務器

   9) 可以通過web瀏覽器監視服務器的狀態, 可以自定義日志.

   10) 支持服務器端包含命令(ssi).

   11) 支持安全socket層(ssl).

   12) 具有用戶會話過程的跟蹤能力.

   13) 支持fastcgi(只在apache1.3時支持,apache2以后的版本不再支持了)

   14) 支持java servlets

   15) 不支持epoll(這年頭,epoll幾乎是性能的必備,這也是為什么apache的并發性能比其他兩款web軟件差的主要原因吧)

   16) 非常好用的proxy和proxy_ajp(很多人用它作為tomcat的前端)

3.nginx

    Nginx是俄羅斯人編寫的十分輕量級的HTTP服務器,Nginx,它的發音為“engine X”, 是一個高性能的HTTP和反向代理服務器,同時也是一個IMAP/POP3/SMTP 代理服務器.Nginx是由俄羅斯人 Igor Sysoev為俄羅斯訪問量第二的 Rambler.ru站點開發.

    Nginx以事件驅動的方式編寫,所以有非常好的性能,同時也是一個非常高效的反向代理、負載平衡。其擁有匹配 Lighttpd的性能,同時還沒有Lighttpd的內存泄漏問題,而且Lighttpd的mod_proxy也有一些問題并且很久沒有更新。但是Nginx并不支持cgi方式運行,原因是可以減少因此帶來的一些程序上的漏洞。所以必須使用FastCGI方式來執行PHP程序。

    nginx做為HTTP服務器,有以下幾項基本特性:

    1)處理靜態文件,索引文件以及自動索引;打開文件描述符緩沖.

    2)無緩存的反向代理加速,簡單的負載均衡和容錯.

    3)FastCGI,簡單的負載均衡和容錯.

    4)模塊化的結構。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其它代理服務器處理單頁中存在的多個SSI,則這項處理可以并行運行,而不需要相互等待。

    5) Nginx專為性能優化而開發,性能是其最重要的考量,實現上非常注重效率。它支持內核Poll模型,能經受高負載的考驗,有報告表明能支持高達 50,000個并發連接數。

    6) Nginx具有很高的穩定性。其它HTTP服務器,當遇到訪問的峰值,或者有人惡意發起慢速連接時,也很可能會導致服務器物理內存耗盡頻繁交換,失去響應,只能重啟服務器。例如當前apache一旦上到200個以上進程,web響應速度就明顯非常緩慢了。而Nginx采取了分階段資源分配技術,使得它的CPU與內存占用率非常低。nginx官方表示保持10,000個沒有活動的連接,它只占2.5M內存,所以類似DOS這樣的攻擊對nginx來說基本上是毫無用處的。就穩定性而言,nginx比lighthttpd更勝一籌。

    7) Nginx支持熱部署。它的啟動特別容易, 并且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動。你還能夠在不間斷服務的情況下,對軟件版本進行進行升級。

2. Nginx與Apache的異同

    Nginx和Apache一樣,都是HTTP服務器軟件,在功能實現上都采用模塊化結構設計,都支持通用的語言接口,如PHP、Perl、Python等,同時還支持正向和反向代理、虛擬主機、URL重寫、壓縮傳輸、SSL加密傳輸等。

    1)在功能實現上,Apache的所有模塊都支持動、靜態編譯,而Nginx模塊都是靜態編譯的,

    2)對FastCGI的支持,Apache對Fcgi的支持不好,而Nginx對Fcgi的支持非常好;

     3)在處理連接方式上,Nginx支持epoll,而Apache卻不支持;

     4)在空間使用上,Nginx安裝包僅僅只有幾百K,和Nginx比起來Apache絕對是龐然大物。

1) 

Nginx 相對apache的優點:

輕量級,同樣起web 服務,比apache 占用更少的內存及資源

靜態處理,Nginx 靜態處理性能比 Apache 高 3倍以上

抗并發,nginx 處理請求是異步非阻塞的,而apache則是阻塞型的,在高并發下nginx 能保持低資源低消耗高性能。在Apache+PHP(prefork)模式下,如果PHP處理慢或者前端壓力很大的情況下,很容易出現Apache進程數飆升,從而拒絕服務的現象。 

    高度模塊化的設計,編寫模塊相對簡單

    社區活躍,各種高性能模塊出品迅速啊

2) apache 相對nginx 的優點:

    rewrite,比nginx 的rewrite 強大

    模塊超多,基本想到的都可以找到

    少bug,nginx的bug相對較多

    超穩定

    Apache對PHP支持比較簡單,Nginx需要配合其他后端用 

    存在就是理由,一般來說,需要性能的web 服務,用nginx 。如果不需要性能只求穩定,那就apache 吧。后者的各種功能模塊實現得比前者,例如ssl 的模塊就比前者好,可配置項多。

   這里要注意一點,epoll(freebsd 上是 kqueue )網絡IO 模型是nginx 處理性能高的根本理由,但并不是所有的情況下都是epoll 大獲全勝的,如果本身提供靜態服務的就只有寥寥幾個文件,apache 的select 模型或許比epoll更高性能。當然,這只是根據網絡IO 模型的原理作的一個假設,真正的應用還是需要實測了再說的。

3) . 選擇Nginx的優勢所在

    Nginx作為HTTP服務器的優勢是顯而易見的,它有很多其他Web服務器無法比擬的性能和優勢:

1) 作為Web服務器: Nginx處理靜態文件、索引文件,自動索引的效率非常高。

2) 作為代理服務器,Nginx可以實現無緩存的反向代理加速,提高網站運行速度。

3) 作為負載均衡服務器,Nginx既可以在內部直接支持Rails和PHP,也可以支持HTTP代理服務器對外進行服務,同時還支持簡單的容錯和利用算法進行負載均衡。

4) 在性能方面,Nginx是專門為性能優化而開發的,在實現上非常注重效率。它采用內核Poll模型(epoll and kqueue ),可以支持更多的并發連接,最大可以支持對50 000個并發連接數的響應,而且只占用很低的內存資源。

5) 在穩定性方面,Nginx采取了分階段資源分配技術,使得CPU與內存的占用率非常低。Nginx官方表示,Nginx保持10 000個沒有活動的連接,而這些連接只占用2.5MB內存,因此,類似DOS這樣的攻擊對Nginx來說基本上是沒有任何作用的。

6) 在高可用性方面,Nginx支持熱部署,啟動速度特別迅速,因此可以在不間斷服務的情況下,對軟件版本或者配置進行升級,即使運行數月也無需重新啟動,幾乎可以做到7×24小時不間斷地運行

   這兩者最核心的區別在于apache是同步多進程模型,一個連接對應一個進程;nginx是異步的,多個連接(萬級別)可以對應一個進程 。

   建議使用Nginx做前端,后端用apache。大型網站最好使用Nginx自帶的集群功能。

Nginx和apache壓力測試數據比較:

apache nginx
n c Time r/s t/r(ms) Time r/s t/r
40000 200 45 886 225 41 955 209
40000 200 36 1091 183 40 986 202
40000 400 361 110 3614 49 813 491
40000 400 49 811 492 38 1027 389
40000 400 38 1037 385 41 963 415
40000 1000 407 98 10177 51 773 1292
40000 1000 323 123 8091
40000 5000 349 114 43660 53 741 6742
40000 10000 364 109 91142 69 574 17394
40000 15000 369 108 138665 310

服務器數據:

n c sys sys
40000 200 ProcessNum:223 Mem:130.0 CPU:253.2 Load:2.57
ProcessNum:209 Mem:121.5 CPU:186.7 Load:3.52
ProcessNum:35 Mem:7.1 CPU:0 Load:0.29
ProcessNum:35 Mem:7.1 CPU:7.8 Load:5.99
40000 400 ProcessNum:177 Mem:134.3 CPU:55.3 Load:0.46
ProcessNum:413 Mem:239.3 CPU:122.4 Load:3.52
ProcessNum:35 Mem:10.7 CPU:5.9 Load:0.04
ProcessNum:38 Mem:10.7 CPU:29.1 Load:5.08
40000 1000 ProcessNum:188 Mem:92.9 CPU:10.8 Load:0.01
ProcessNum:401 Mem:200.0 CPU:15.3 Load:1.43
ProcessNum:39 Mem:7.1 CPU:8.3 Load:3.08
ProcessNum:39 Mem:7.1 CPU:15.6 Load:4.21

轉自:http://blog.csdn.net/hguisu/article/details/7403622

原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/3041

(1)
s19930811s19930811
上一篇 2015-04-10
下一篇 2015-04-10

相關推薦

  • 網絡與進程管理相關命令使用

    網絡管理之netstat命令 netstat     -print network connections,routing tables,interface statistics,masquerade connections and multicast memberships     netstat…

    Linux干貨 2016-09-07
  • 馬哥教育網絡班21期+第六周課程練習

    馬哥教育網絡班21期+第6周課程練習 [TOC] vim編輯器使用方法總結 vim編輯器: 簡介: vi: visual interface,文本編輯器 vim: vi improved,vi的增強版 文本:ASCII,Unicode, 文本編輯器種類: 行編輯器:sed, 全屏編輯器:nano,vi vim:模式化的…

    Linux干貨 2016-08-15
  • Linux系統vim文本編輯器

                                                      &nbsp…

    Linux干貨 2016-08-15
  • 設計模式 ( 十五 ) 中介者模式Mediator(對象行為型)

    1.概述 在面向對象的軟件設計與開發過程中,根據“單一職責原則”,我們應該盡量將對象細化,使其只負責或呈現單一的職責,即將行為分布到各個對象中。 對于一個模塊或者系統,可能由很多對象構成,而且這些對象之間可能存在相互的引用,在最壞的情況下,每一個對象都知道其他所有的對象,這無疑復雜化了對象之間的聯系。雖然將一個系統分割成許多對象通??梢栽鰪娍蓮陀眯裕菍ο蟆?/p>

    Linux干貨 2015-07-20
  • Mysql 多表聯合查詢效率分析及優化

    1. 多表連接類型 1. 笛卡爾積(交叉連接) 在MySQL中可以為CROSS JOIN或者省略CROSS即JOIN,或者使用','  如:  SELECT * FROM table1 CROSS JOIN table2  &nb…

    Linux干貨 2015-04-13
  • Linux文件類型及顏色標識整理

    前言: 在windows中,我們用不同的后綴名標識不同類型的文件。而在linux中卻沒有這樣的機制,雖然我們可以人為的進行標識,但是在linux并沒有擴展名的說法。linux中我們可以用type 或者用ls -l 查看到每個文件的類型,并且通過ls –color參數,不同類型的文件會標識不同的顏色。接下來我們就詳細介紹各個文件類型和與之對應的顏色…

    Linux干貨 2016-10-17
欧美性久久久久