nginx-用Nginx实现均衡负载效率反而降低,为什么?

问题描述

用Nginx实现均衡负载效率反而降低,为什么?

我在Win7系统下安装了两个tomcat,一个8080端口,一个8088端口。跑着同样的WEB项目。然后在Win7下用VMWare装了个CentOS6.5虚拟机,在该虚拟机上安装并配置了Nginx。然后在该虚拟机上用apache ab进行压力测试,结果用nginx反而比不用差一些。请高手帮助解惑!!!

下面是我的测试方法和结果:
[root@localhost local]# ab -n 10000 -c 1000 -H "Authorization: Digest username="cpe", realm="SWACS", nonce="2ef7d7f74e136a548362a488fa1ca753",uri="/SWTMS/acs", qop="auth", nc=00000001, cnonce="1243442698", response="78374f1538516f6055faf0dcab6571a7",opaque="A0720F8F9F1C4EC1B108C201E4660C79"" -p ./inform.txt http://172.16.15.110:8080/SWTMS/acs(这是直接访问tomcat,访问nginx则是把url改成http://172.16.15.111/SWTMS/acs)
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.16.15.110 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests

Server Software: Apache-Coyote/1.1
Server Hostname: 172.16.15.110
Server Port: 8080

Document Path: /SWTMS/acs
Document Length: 549 bytes

Concurrency Level: 1000
Time taken for tests: 10.269 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 7910000 bytes
Total POSTed: 32570000
HTML transferred: 5490000 bytes
Requests per second: 973.81 #/sec
Time per request: 1026.895 ms
Time per request: 1.027 ms

下面是我的Nginx配置:
#user nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
error_log logs/error.log info;

pid logs/nginx.pid;

worker_rlimit_nofile 65535;

events {
worker_connections 65535;
multi_accept on;
use epoll;
}

http {
include mime.types;
default_type application/octet-stream;

charset utf-8; #默认编码
server_names_hash_bucket_size 128; #服务器名字的hash表大小
client_header_buffer_size 32k; #上传文件大小限制
large_client_header_buffers 4 64k; #设定请求缓
client_max_body_size 8m; #设定请求缓

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

access_log  logs/access.log  main;

sendfile        on;
tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;
tcp_nodelay        on;

#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;

#gzip模块设置
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.1; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
gzip_types text/plain application/x-javascript text/css application/xml;
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
gzip_vary on;

upstream tomcats {
     server 172.16.15.110:8088 weight=1;
     server 172.16.15.110:8080 weight=1;
     #ip_hash;
}

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        root   html;
        index  index.html index.htm;
        proxy_pass http://tomcats;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        client_max_body_size 50m;
        client_body_buffer_size 256k;
        proxy_connect_timeout 10;
        proxy_send_timeout 15;
        proxy_read_timeout 15;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ .php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ .php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /.ht {
    #    deny  all;
    #}
}

# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
#    listen       8000;
#    listen       somename:8080;
#    server_name  somename  alias  another.alias;

#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}

# HTTPS server
#
#server {
#    listen       443 ssl;
#    server_name  localhost;

#    ssl_certificate      cert.pem;
#    ssl_certificate_key  cert.key;

#    ssl_session_cache    shared:SSL:1m;
#    ssl_session_timeout  5m;

#    ssl_ciphers  HIGH:!aNULL:!MD5;
#    ssl_prefer_server_ciphers  on;

#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}

}

解决方案

你机器是单核吧。这样无法发挥多核CPU的性能,所以单个比多个节省了调度。反而性能会好一些

解决方案二:

我给虚拟机分配的是一个CPU,不确定是不是这个原因。我在Win7(4核)下面也配过nginx,但效率也低。不过Windows系统好像的确不能用nginx提速

解决方案三:

在linux真机上测试,排除下io 网络等别的瓶颈

解决方案四:

参考下:http://www.nginx.cn/2212.html 或许对你有用

时间: 2024-10-28 13:58:37

nginx-用Nginx实现均衡负载效率反而降低,为什么?的相关文章

Nginx + Tomcat 动静分离实现负载均衡(转)

0.前期准备 使用Debian环境.安装Nginx(默认安装),一个web项目,安装tomcat(默认安装)等. 1.一份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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

使用 NGINX 和 NGINX Plus 的 Ingress Controller 进行 Kubernetes 的负载均衡

本文讲的是使用 NGINX 和 NGINX Plus 的 Ingress Controller 进行 Kubernetes 的负载均衡[编者的话]本文描述了由 NGINX 和 NGINX Plus 实现的 Ingress Controller,完全支持了 Ingress 特性,使用 Ingress 将外部流量负载到集群内的服务,并提供了扩展来支持额外的负载均衡需求. 运行和管理跨机器集群的大规模的容器微服务应用是一个极具挑战的任务.Kubernetes 提供了一个强大的容器编排解决方案,从而帮助

Nginx+Keepalived实现Web服务器负载均衡

说明: 操作系统:CentOS 5.X 64位 Web服务器:192.168.21.127.192.168.21.128 站点:bbs.111cn.net和sns.111cn.net部署在两台Web服务器上 实现目的: 增加两台服务器(主主模式),通过Nginx+Keepalived实现Web服务器负载均衡 架构规划: Nginx服务器:192.168.21.129.192.168.21.130 虚拟服务器(VIP):192.168.21.252.192.168.21.253 部署完成之后: 1

nginx+iis实现简单的负载均衡_nginx

最近在研究分布式系统架构方面的知识,包括负载均衡,数据库读写分离,分布式缓存redis等.本篇先从负载均衡服务架构入手,关于负载均衡百度百科的定义如下:负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务. 我的解释:一项任务交由一个开发人员处理总会有上限处理能力,这时可以考虑增加开发人员来共同处理这项任务,多人处理同一项任务时就会涉及到调度问题,即任务分配,这和多线程

Linux环境下Nginx 通过upstream如何配置负载均衡以及实现

一,服务器准备情况,四台: 1,前段服务器: 192.168.1.112  hosts定向测试域名nginx.21yunwei.com 192.168.1.113 备用前端服务器. 后端web服务器池web_pools: 192.168.1.102 192.168.1.103 2,环境:统一centos 6 前端服务器安装nginx.环境安装这里就不写了,可以参考文章<linux下如何安装nginx环境配置>部署nginx环境. 后端web服务器 池统一安装apache:yum install

Docker和Nginx实现一个简单的负载均衡

当前使用centos7系统 1.安装nginx 参考http://blog.whsir.com/post-2078.html 2.docker拉取nginx镜像 docker pull nginx 3.创建两个目录 mkdir -p /data/demo1mkdir -p /data/demo2 分别在两个目录下创建两个index.html,demo1下index.html内容为this is demo1,demo2下index.html内容为this is demo24.通过docker运行两

Nginx的反向代理与负载均衡

1.1 集群是什么 简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服器.这些服务器之间可以彼此通信,协同向用户提供应用程序.系统资源和数据,并以单一系统的模式加以管理.当用户客户机请求集群系统时,集群给用户的感觉就是一个单一独立的服务器,而实际上用户请求的是一组集群服务器. 打开谷歌.百度的页面,看起来好简单,也许你觉得用几分钟就可以制作出相似的网页,而实际上,这个页面的背后是由成千上

nginx tomcat 配置集群负载

开发的应用采用F5负载均衡交换机,F5将请求转发给5台hp unix服务器,每台服务器有多个webserver实例,对外提供web服务和socket等接口服务.之初,曾有个小小的疑问为何不采用开源的apache.Nginx软件负载,F5设备动辄几十万,价格昂贵?自己一个比较幼稚的问题,后续明白:F5是操作于IOS网络模型的传输层,Nginx.apache是基于http反向代理方式,位于ISO模型的第七层应用层.直白些就是TCP UDP 和http协议的区别,Nginx不能为基于TCP协议的应用提

运维小知识之nginx---CentOS6.5安装nginx配置nginx sticky

运维小知识之nginx---CentOS6.5安装nginx配置nginx sticky            背景          今天经理在系统中使用nginx配置负载均衡,笔者想项目目前就一个服务器有必要吗?"以后会拓展的!",我能怎么办,反正在他眼里这些加上一个负载均衡又不花时间,这篇文章笔者主要是写如何在CentOS下安装nginx以及为了解决session共享问题而在nginx中添加的sticky.            一.安装准备            首先由于ngi