南宁网站建设培训学校,门户网站时代,玉溪市住房和建设局公布网站,鸿邑网站建设话说nginx在大压力的环境中比apache的表现要好#xff0c;于是下载了一个来折腾一下。
下载并编译安装#xff0c;我的编译过程有点特别#xff1a;
1。去除调试信息#xff0c;修改$nginx_setup_path/auto/cc/gcc这个文件#xff0c;将 CFLAGS$CFLAGS -g …话说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 \ --userwww \ --groupwww \ --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 max102400 inactive20s; 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 [rootlogserver 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.80GHzOS认作4个CPU4GB内存OS如下 ? 1 2 3 4 [rootlogserver 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 [rootlogserver 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能应付多大的并发连接数呢我自己做了个测试2000020000个长连接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放在前端可能就是这个原因吧。
杨航收集技术资料分享给大家