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.178linux.com/3041

(1)
上一篇 2015-04-10 21:19
下一篇 2015-04-10 21:19

相关推荐

  • iptables 实现应用层过滤

        在linux环境中,工作于内核空间的netfilter和工作于用户空间的iptables共同组成了其功能强大且操作灵活的防火墙系统,对进出主机或内外网之间的流量基于IP地址、通信协议、端口以及连接状态等进行管控,然而,对于一些使用非固定端口或者通信协议的应用程序,默认是没有办法做限制的,比如聊天软件QQ、下载工具迅雷等,不过我们可…

    Linux干货 2015-07-10
  • Linux系统启动流程与内管管理(上)

    在讲linux系统启动流程之前,来讲讲linux的组成,这样能能帮助我们深入了解系统的启动流程,废话不多说直接上系统启动流程图 linux组成 linux:kernel+rootfs kenrel的作用:进程管理、内存管理、网络管理、驱动程序、文件系统、安全管理等   rootfs:程序和glibc 库:函数结合,function,调用接口(头文件…

    系统运维 2016-09-14
  • screen命令

    安装SCREEN[root@centos6 ~]# dfFilesystem     1K-blocks    Used Available Use% Mounted on/dev/sda2       51475068 5052580  43801048  11% /…

    2017-07-22
  • centos 6系统启动流程分析

    linux 系统启动流程: 之前有描述过linux的启动流程,但还有许多模糊的地方,经过一段时间了学习,查资料,看脚本,比初次理解更深,可以将上次模糊或不足的地方描述得比较清楚一些。 先看一张启动流程图。   分析: linux系统的启动流程大概可以分为两大部分: 第一部分为内核空间的启动 第二部分为用户空间的启动 其中,内核空间的启动主要可为分四…

    2017-05-15
  • 马哥教育网络班22期+第9周课程练习 忍者乱太郎喻成

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash declare -i user_can_not_login_count; declare -i user_can_login…

    Linux干货 2017-01-03
  • Linux系统下的bonding设置

    bonding多个物理网卡聚合成一个虚拟网卡     Bonding,其原理是讲多个物理网卡聚合成一个虚拟网卡,一张网卡正常工作,其余网卡作为备用,每隔一段时间(miimon=毫秒),向正常工作的网卡发一状态询问,若没回复,则认为其运行失败,然后就会启用备用网卡,但是IP地址不会改变。   &nbs…

    Linux干货 2016-09-07