nginx比较apache

话说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
[root@logserver 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
[root@logserver 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
[root@logserver 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中,猛击这里下载,如下:

image

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

image

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

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

imageimage 

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

“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。

 

image   image

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

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

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

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

image

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

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

imageimage

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>

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

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

imageimageimageimage

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

 

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

imageimageimageimage

 

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

杨航收集技术资料,分享给大家



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/388397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机主板各模块复位,电脑主板复位电路工作原理分析

电源、时钟、复位是主板能正常工作的三大要素。主板在电源、时钟都正常后&#xff0c;复位系统发出复位信号&#xff0c;主板各个部件在收到复位信号后&#xff0c;同步进入初始化状态。如图7-11所示为复位电路的工作原理图&#xff0c;各个十板实现复位的电路不尽相同&#xf…

Docker制作dotnet core控制台程序镜像

(1)首先我们到某个目录下&#xff0c;然后在此目录下打开visual studio code. 2.编辑docker file文件如下: 3.使用dotnet new console创建控制台程序; 4.使用docker build -t daniel/console:dev .来进行打包; 5.启动并运行镜像; 6.我们可以看到打包完的镜像将近2G,因为我们使用…

【362】python 正则表达式

参考&#xff1a;正则表达式 - 廖雪峰 参考&#xff1a;Python3 正则表达式 - 菜鸟教程 参考&#xff1a;正则表达式 - 教程 re.match 尝试从字符串的起始位置匹配一个模式&#xff0c;如果不是起始位置匹配成功的话&#xff0c;match()就返回none。 re.search 扫描整个字符串并…

在Python中使用Twitter Rest API批量搜索和下载推文

数据挖掘 &#xff0c; 编程 (Data Mining, Programming) Getting Twitter data获取Twitter数据 Let’s use the Tweepy package in python instead of handling the Twitter API directly. The two things we will do with the package are, authorize ourselves to use the …

第一套数字电子计算机,计算机试题第一套

《计算机试题第一套》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《计算机试题第一套(5页珍藏版)》请在人人文库网上搜索。1、计算机试题第一套1、计算机之所以能自动运算,就是由于采用了工作原理。A、布尔逻辑。B 储存程序。C、数字电路。D,集成电路答案选B2、“长…

Windows7 + Nginx + Memcached + Tomcat 集群 session 共享

一&#xff0c;环境说明 操作系统是Windows7家庭版&#xff08;有点不专业哦&#xff0c;呵呵&#xff01;&#xff09;&#xff0c;JDK是1.6的版本&#xff0c; Tomcat是apache-tomcat-6.0.35-windows-x86&#xff0c;下载链接&#xff1a;http://tomcat.apache.org/ Nginx…

git 版本控制(一)

新建代码库repository 1、在当前目录新建一个git代码库 git init git init projectname 2、下载一个项目&#xff0c;如果已经有了远端的代码&#xff0c;则可以使用clone下载 git clone url 增加/删除/改名文件 1、添加指定文件到暂存区 git add filename 2、添加指定目录到暂…

rollup学习小记

周末在家重构网关的Npm包&#xff0c;用到了rollup&#xff0c;记下笔记 rollup适合库library的开发&#xff0c;而webpack适合应用程序的开发。 rollup也支持tree-shaking&#xff0c;自带的功能。 package.json 也具有 module 字段&#xff0c;像 Rollup 和 webpack 2 这样的…

大数据 vr csdn_VR中的数据可视化如何革命化科学

大数据 vr csdnAstronomy has become a big data discipline, and the ever growing databases in modern astronomy pose many new challenges for analysts. Scientists are more frequently turning to artificial intelligence and machine learning algorithms to analyze…

object-c 日志

printf和NSlog区别 NSLog会自动加上换行符&#xff0c;不需要自己添加换行符&#xff0c;NSLog会加上时间和进程信息&#xff0c;而printf仅将输入的内容输出不会添加任何额外的东西。两者的输入类型也是有区别的NSLog期待NSString*&#xff0c;而printf期待const char *。最本…

计算机真正管理的文件名是什么,计算机题,请大家多多帮忙,谢谢

4、在资源管理器中&#xff0c;若想显示文件名、文件大小和文件类型&#xff0c;应采用什么显示方式。( )A、小图标显示 B、列表显示 C、详细资料显示 D、缩略图显示5、在EXCEL中&#xff0c;可以依据不同要求来提取和汇总数据&#xff0c;4、在资源管理器中&#xff0c;若想显…

小a的排列

链接&#xff1a;https://ac.nowcoder.com/acm/contest/317/G来源&#xff1a;牛客网小a有一个长度为nn的排列。定义一段区间是"萌"的&#xff0c;当且仅当把区间中各个数排序后相邻元素的差为11 现在他想知道包含数x,yx,y的长度最小的"萌"区间的左右端点 …

Xcode做简易计算器

1.创建一个新项目&#xff0c;选择“View-based Application”。输入名字“Cal”&#xff0c;这时会有如下界面。 2.选择Resources->CalViewController.xib并双击&#xff0c;便打开了资源编辑对话框。 3.我们会看到几个窗口。其中有一个上面写着Library&#xff0c;这里…

计算机 编程 教程 pdf,计算机专业教程-第3章编程接口介绍.pdf

下载第3章 编程接口介绍• DB2 UDB应用程序概述• 嵌入S Q L编程• CLI/ODBC应用程序• JAVA应用程序• DAO 、R D O 、A D O应用程序本章将介绍对DB2 UDB 可用的编程方法及其特色&#xff0c;其中一些方法附有简单的例子&#xff0c;在这些例子中&#xff0c;有些并不是只适用…

导入数据库怎么导入_导入必要的库

导入数据库怎么导入重点 (Top highlight)With the increasing popularity of machine learning, many traders are looking for ways in which they can “teach” a computer to trade for them. This process is called algorithmic trading (sometimes called algo-trading)…

windows查看系统版本号

windows查看系统版本号 winR,输入cmd&#xff0c;确定&#xff0c;打开命令窗口&#xff0c;输入msinfo32&#xff0c;注意要在英文状态下输入&#xff0c;回车。然后在弹出的窗口中就可以看到系统的具体版本号了。 winR,输入cmd&#xff0c;确定&#xff0c;打开命令窗口&…

02:Kubernetes集群部署——平台环境规划

1、官方提供的三种部署方式&#xff1a; minikube&#xff1a; Minikube是一个工具&#xff0c;可以在本地快速运行一个单点的Kubernetes&#xff0c;仅用于尝试Kubernetes或日常开发的用户使用。部署地址&#xff1a;https://kubernetes.io/docs/setup/minikube/kubeadm Kubea…

更便捷的画决策分支图的工具_做出更好决策的3个要素

更便捷的画决策分支图的工具Have you ever wondered:您是否曾经想过&#xff1a; How did Google dominate 92.1% of the search engine market share? Google如何占领搜索引擎92.1&#xff05;的市场份额&#xff1f; How did Facebook achieve 74.1% of social media marke…

供来宾访问计算机打开安全吗,计算机安全设置操作手册(22页)-原创力文档

计算机安全设置操作手册ISO27001项目实施电脑配置(以XP为例)账户设置user每台电脑设置administrator和user帐户&#xff1b;管理员账户密码至少 8位, 账户至少6位user将Administrator和user账户以外的其他账户禁用用具体步骤如下&#xff1a;、右击【我的电脑】选择【管理】如图…

Windows半透明窗口开发技巧

Windows半透明窗口开发技巧 www.visual-gear.com 原创技术文章 在windows平台上从窗口绘图有两种方法&#xff1a; 第一种响应窗口的WM_PAINT消息&#xff0c;使用窗口DC进行绘制 第二种是将窗口样式设置为层窗口&#xff0c;即 WS_EX_LAYERED设置为该样式之后窗口将不会产生任…