nginx比较apache

http://blog.csdn.net/hanghangaidoudou/article/details/8506963

话说nginx在大压力的环境中比apache的表现要好,于是下载了一个来折腾一下。

下载并编译安装,我的编译过程有点特别:

1。去除调试信息,修改$nginx_setup_path/auto/cc/gcc这个文件,将 CFLAGS="$CFLAGS -g"  这一行注释掉。

2。由于仅测试WEB服务器的性能,所以不安装FastCGI。

?


1

2

3

4

5

6

7

./configure \

  --prefix=/opt/nginx \

  --user=www \

  --group=www \

  --with-http_stub_status_module \

  --with-http_ssl_module \

  --without-http_fastcgi_module

安装完成之后,将一堆生产环境中静态化了的HTML页面copy 到 nginx 的服务器上,我的 nginx.conf 的配置如下:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

worker_processes  8;

worker_rlimit_nofile 102400;

events 

{

    use epoll;

    worker_connections  204800;

}

http 

{

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    tcp_nopush     on;

    charset GBK ;

    keepalive_timeout  60;

    server_names_hash_bucket_size 128;

    client_header_buffer_size 2k;

    large_client_header_buffers 4 4k;

    client_max_body_size 8m;

    open_file_cache max=102400 inactive=20s;

    server 

    {

        listen       80;

                 

        location / 

        {

          root   /tmp/webapps/;

          index  index.html index.htm;

        }

         

        location = /NginxStatus 

        

          stub_status on;

          access_log off;

        }

         

        error_page   500 502 503 504  /50x.html;

         

        location = /50x.html 

        {

            root   html;

        }

    }

}

为了使操作系统不成为瓶颈,调整了一下参数,如下:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

[[email protected] etc]# cat sysctl.conf | grep -v "^$" | grep -v "^#"; 

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 6553600

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

net.ipv4.tcp_max_tw_buckets = 6000

net.ipv4.tcp_sack = 1

net.ipv4.tcp_window_scaling = 1

net.ipv4.tcp_rmem = 4096 87380 4194304

net.ipv4.tcp_wmem = 4096 16384 4194304

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.core.netdev_max_backlog = 262144

net.core.somaxconn = 262144

net.ipv4.tcp_max_orphans = 3276800

net.ipv4.tcp_max_syn_backlog = 262144

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915000000 927000000

net.ipv4.tcp_fin_timeout = 1

net.ipv4.tcp_keepalive_time = 30

net.ipv4.ip_local_port_range = 1024 65000

我这台是比较老的服务器了,DELL 2850 两颗 Intel(R) Xeon(TM) CPU 2.80GHz,OS认作4个CPU,4GB内存,OS如下:

?


1

2

3

4

[[email protected] etc]# uname -a

Linux logserver 2.6.9-78.ELsmp #1 SMP Thu Jul 24 23:54:48 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux

[[email protected] etc]# cat /etc/redhat-release 

CentOS release 4.7 (Final)

测试工具是 apache 的 ab ,用来模拟,大量的并发连接,本来是在另一台虚拟机中模拟客户端,但随着压力的上升,还没压死 nginx 就先将自己压死了 -_- ,最后只能自己压自己了。

测试脚本大概如下:

?


1

ab -n 100000 -c >client_number< [-k] http://***********/cms/index.html

index.html 的大小是:123784 byte

我将测试数据整理到Excel中,猛击这里下载,如下:

nginx 短连接测试结果(1/20抽样展示)

nginx 长连接测试结果(1/20抽样展示)

单看数字可能比较枯燥,还是看图吧:

针对第一组图片,有几个地方需要解析一下的。

“Concurrency Level”并不对应有多少个浏览器或者多少个用户,应该理解为并发连接数,通常IE访问一个网页,打开3~10个连接,正常情况下,10000个“客户端数”可以非常粗略地认为1000~3000个用户吧。

长连接的典型代表是 HTTP 1.1 ,而短连接的典型代表是 HTTP 1.0,支持HTTP 1.1的浏览器早就遍地都是了,为什么还要测试短连接呢?第一,这是因为实际的浏览中,一个“长”连接不可能像ab测试中的“长”连接这么长,所以短链接 的测试成绩作为一个“底线”;第二,某些扫描工具用的就是短链接的方式,既然要做互联网的应用,也要“照顾”它们啊。因此,在生产环境中,真实的成绩会在 红线和蓝线之间的区间,具体是怎么样呢,“这个就不能说太细了”。

关于“传输率”这幅图的纵坐标的意义,100000 相当于 100MB/sec,也就是常说的百兆网络(忽略 CSMA/CD 造成的损失),而常说的千兆网络,经过测试,大概在400000~500000之间,换句话来说,如果nginx服务器的出口带宽是百兆网络的话,瓶颈在 网络而不是nginx。

   

针对第二组图片也是有几个地方需要解析一下的:

生产环境的成绩应该是在蓝线和红线之间的区间,这个就不用再解析了吧。

“Logest Response Time” 实际上取的是能完成所有请求中的99%时的时间,这样可以屏蔽一些误差。

随着压力的增加,响应时间的飙升是可以预见的,但是多少才算是一个可接受范围呢?在2009系统架构师大会腾讯的邱跃鹏在《海量SNS网站的柔性运营》中的发言提到的“用户速度体验的1-3-10原则”:

可以简单的认为:如果以3秒的响应时间作为标准的话,nginx能应付不超过10000的并发连接数,如果以10秒响应时间作为标准的话,nginx能应付15000以下个并发连接,当然,可能场合不同,您的用户连0.3秒都无法忍受,这个就要另说咯。

如果我假设,只要服务器不出现“连接重置”,“服务器无响应”等错误,只要能返回内容,我就愿意等,那么nginx能应付多大的并发连接数呢?我自己做了个测试,20000+20000个长连接,20000个短链接,同时压向nginx,结果如何呢?

nginx还是顶住了,没挂。我曾试过再加大压力,但是始终跑不完测试,结果作罢。

不怕不识货,就怕货比货,大名鼎鼎的apache又会怎么样呢?在此之前大家可以看看这篇帖子——大家猜这样的linux服务器 apache最大的并发数是多少,帖子中提到的服务器比我这台还要好,但是,超过70%的人都认为突破不了3000大关,咱们“不看广告,看疗效”。

我的Apache使用worker模式,配置如下:

?


1

2

3

4

5

6

7

8

9

10

<ifmodule worker.c>

    ServerLimit  1000

    ThreadLimit  11000

    StartServers 40

    MaxClients   30000

    MinSpareThreads  1000

    MaxSpareThreads  1000

    ThreadsPerChild  300

    MaxRequestsPerChild 0

</ifmodule>

Apache 短连接成绩(1/10抽样展示)

Apache 短连接成绩(1/10抽样展示)

Apache 的结果图形和nginx类似,但是大家请留意横坐标,最大是10000,而nginx最大的是20000,这是由于测到10000的时候,再往上加压力Apache就受不了,不是SWAP用尽就是连接超时。

我把nginx和Apache的图标拼在一起,方便对比:

从图表可以看到nginx作单纯的WEB服务器,也就是放静态内容,性能上比Apache要好,特别可承受压力、带宽及资源消耗上都要优于Apache。很多大型网站都喜欢把nginx放在前端,可能就是这个原因吧。

时间: 2024-10-06 15:19:43

nginx比较apache的相关文章

Nginx对(apache+foreman+puppet)负载均衡

Nginx对(apache+foreman+puppet)负载均衡 一.前提准备 试验环境: OS:Centos 6.5_x86 puppet-server-3.8.3 foreman-1.9.2 foreman-proxy-1.9.2 httpd-2.2.15 服务器已经搭建好了apache+foreman+puppet详情请参考: http://4709096.blog.51cto.com/4699096/1710697 二.修改pupeptmaster相关配置 2.1修改puppetmas

nginx、Apache、IIS中413 Request Entity Too Large问题解决方法

分享下nginx.Apache.IIS三种服务器解决413 Request Entity Too Large问题的方法. 一.nginx服务器 nginx出现这个问题的原因是请求实体太长了.一般出现种情况是Post请求时Body内容Post的数据太大了,如上传大文件过大.POST数据比较多. 处理方法在nginx.conf增加 client_max_body_size的相关设置, 这个值默认是1m,可以增加到8m以增加提高文件大小限制:当然可以设置的更大点.# 在http,server或者loc

Nginx和Apache各自的优缺点

nginx 相对 apache 的优点: 轻量级,同样起web 服务,比apache 占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 高度模块化的设计,编写模块相对简单 社区活跃,各种高性能模块出品迅速啊 apache 相对nginx 的优点: rewrite ,比nginx 的rewrite 强大 模块超多,基本想到的都可以找到 少bug ,nginx 的bug 相对较多 超稳定 优缺点: 1.作为

nginx and apache

Apache与Nginx的优缺点比较 1.nginx相对于apache的优点: 轻量级,同样起web 服务,比apache 占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 ,高度模块化的设计,编写模块相对简单,社区活跃,各种高性能模块出品迅速啊 ! apache 相对于nginx 的优点: rewrite ,比nginx 的rewrite 强大 ,模块超多,基本想到的都可以找到 .少bug ,ngin

nginx和apache日志记录用户真实ip:X-Real-IP

如果结构里有个反向代理,那后端机器的日志记录的就会是代理的ip,真实的ip看不到了,后端代码可以通过在header里设置真实ip来解决,nginx加入下面一段即可: proxy_set_header X-Real-IP $remote_addr; 后端通过X-REAL-IP或者HTTP_X_REAL_IP变量获取. 日志记录的话,nginx可以定义$http_x_real_ip变量,例如:    log_format main '$http_x_real_ip - $remote_user ' 

Nginx与Apache动静分离

. Nginx与Apache动静分离,布布扣,bubuko.com

Nginx+LAT(apache+tomcat)的实现和使用memcached保存tomcat的session会话

Nginx+LAT(Apache+tomcat)的实现和Apache反向代理和负载均衡tomcat的不同方式以及使用memcached保存tomcat的session会话 一.Nginx+LAT(Apache+tomcat)的环境结构; 1.Nginx +Apache实现负载均衡用户请求至tomcat,其中Nginx是负载均衡调度器,Apache和tomcat在同一台机器上,Apache将关于JSP的请求发送至tomcat. 2.实验结构图: 3.环境介绍,在两台CentOS7上都安装Tomca

linux中查看nginx、apache、php、mysql配置文件路径的方法

转自:http://www.phper163.com/archives/368 如何在linux中查看nginx.apache.php.mysql配置文件路径了,如果你接收一个别人配置过的环境,但没留下相关文档.这时该怎么判断找到正确的加载文件路径了.可以通过以下来判断1.判断apache首先执行命令找到httpd路径ps aux | grep httpd如httpd路径为 /usr/local/apache/bin/httpd然后执行以下命令/usr/local/apache/bin/http

【nginx】nginx与apache的优缺点比较

参考: http://zyan.cc/nginx_php_v6/ nginx相对于apache的优点: 1.轻量级,同样的web 服务,比apache服务器占用更少的内存及资源 2.抗并发,nginx在处理请求是异步非阻塞的(epoll),而apache 则是阻塞型的(select),在高并发下nginx 能保持低资源低消耗高性能 3.高度模块化的设计,编写模块相对简单 4.apache是同步多进程模型,一个连接对应一个进程:nginx是异步的,多个连接(万级别)可以对应一个进程 apache

HAProxy Nginx LVS Apache总结篇

今天也许是最后一次探讨关于HAProxy Nginx LVS Apache的文章,之后将不再赘述,博主之后将要把重心放在Java和Python上,大家如果有什么疑问可以通过博客首页QQ联系.或者留言. 一.今天花点时间总结分享一下HAProxy.Nginx.LVS.Apache: 比较 HAProxy Nginx LVS Apache 简介 高可用.负载均衡且基于TCP和HTTP应用的代理,支持高并发,多集群反代. 高性能http和反向代理服务器.邮件代理服务器,支持高并发,轻量级Web,低系统