转自:http://my.oschina.net/chenzhuo/blog/150200?p=2#comments

根据系统内存64G估算单台tengine做反向代理最高支持72万连接。为了验证达到该连接数时系统稳定运行,进行压测,先验证nginx与client建立72万连接时性能(不转发)。

关闭超线程,12核CPU对应12个nginx worker进程,每个进程worker_connections为60000,且关闭accept_mutex。前端LVS做FNAT模式转发,开synproxy。

1. Client端建立连接数小于proxy上限

7个client,每个client 10个进程对应不同vip,每个进程建立并维持9000个idle连接。共63万并发连接。

最大并发连接

最大CPU利用率

最大内存占用

MaxTengineMem

MaxSocketMem

625.0K

99.33%

4.0G

517M

388M

18:19:42:

如图,从18:19:42开始,Client端发起建立连接过程,CPU占用率提高,内存占用增加(1.4G-3.8G)

每个连接占用内存2.4G/630000 = 3.99KB(4KB

18:19:51:

63W个连接建立完毕(CPS=7),CPU占用率下降趋于0,内存稳定在3.8G。

18:20:42:

Tengine对client空闲TCP连接超时为60s,主动断开连接,出现TimeWait连接。同时Client端收到主动断链后,继续发起连接建立过程以便维持期望的连接数,CPU利用率增加,同时内存占用出现尖峰。

18:20:44:

TimeWait连接增加到180000,超过net.ipv4.tcp_max_tw_buckets = 180000,系统日志中出现:

18:20:44 xxx kernel: : [94657.274380] TCP: time wait bucket table overflow

18:20:52:

orphan sockets达到131110,超过net.ipv4.tcp_max_orphans = 131072,系统日志中报Out of socket memory

18:20:54 xxx kernel: : [94667.682404] Out of socket memory

18:20:54 xxx kernel: : [94667.682414] TCP: too many of orphaned sockets

2. Client端建立连接数超过proxy上限

7个client,每个client 10个进程对应不同vip,每个进程建立并维持11万个idle连接。共请求建立77并发连接。

最大并发连接

最大CPU利用率

最大内存占用

MaxTengineMem

MaxSocketMem

720.0K

99.42%

4.4G

517M

388M

17:01:52:

开始建立连接。

17:02:01:

72W个连接建立完毕(CPS=8万),由Nginx上限为72W,新建立的连接被主动断连,出现大量TimeWait状态连接(17:01:59开始),TimeWait连接达到180000已经超过了net.ipv4.tcp_max_tw_buckets = 180000,系统日志中出现:

17:02:01 slbv2test04.cm3 kernel: : [89937.009770] TCP: time wait bucket table overflow

17:02:01-17:02:13

这13秒内,系统1分钟load由0.8迅速增加到4,tsar监控无数据。

这个过程,Client端与nginx建立连接,nginx达到72W上限,主动断开新建立连接,出现大量TimeWait状态连接,client达不到需要建立的连接数,继续键连接,于是达tw_buckets上限。

17:02:52:

Tengine对client空闲TCP连接超时为60s,主动断开连接,出现TimeWait连接。同时net.ipv4.tcp_tw_timeout = 60,之前的TimeWait连接也逐步减少。

需要评估的是:

net.ipv4.tcp_max_tw_buckets = 180000

net.ipv4.tcp_tw_timeout = 60

net.ipv4.tcp_tw_recycle = 0

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_max_orphans = 131072

这两个取值是否仍然安全。在client请求达到上限时,会带来大量负载,机器hang风险。

Nginx 72万连接性能测试(一)的更多相关文章

  1. 10.6 Nginx 高并发连接

    Nginx 高并发连接 什么是IO,输入输出      Web服务器IO的整个详细过程             (1)客户发起请求到服务器网卡:         (2)服务器网卡接受到请求后转交给内核 ...

  2. Nginx 限制并发连接和并发请求数配置

    Nginx限制并发连接和并发请求数配置   by:授客  QQ:1033553122   测试环境 nginx-1.10.0 配置介绍 查看是否内置模块 # pwd /mnt/nginx-1.10.0 ...

  3. Nginx upstream 长连接

    原文: http://bollaxu.iteye.com/blog/900424 Nginx upstream目前只有短连接,通过HTTP/1.0向后端发起连接,并把请求的"Connecti ...

  4. Tomcat 长连接与短连接性能测试

    环境: 操作系统:centos 6.5 x64 cpu:32 core 内存:  32G web服务器:tomcat 6.x jdk :1.6x 测试环境: 操作系统:centos 6.5 x64 c ...

  5. nginx 的限制连接模块limit_zone与limit_req_zone

    转载于:http://storysky.blog.51cto.com/628458/642970/ nginx 上有两个限制连接的模块一个是 limit_zone 另一个是 limie_req_zon ...

  6. nginx tcp proxy 连接保持设置

    根据前文Nginx tcp proxy module试用的设置,在测试环境中发现tcp连接经常掉线.在该项目站点上找到一个issue,也谈论这件事情,不过别人用在web socket协议上. 其实就是 ...

  7. nginx配置长连接

    http { keepalive_timeout 20; --长连接timeout keepalive_requests 8192; --每个连接最大请求数 } events { worker_con ...

  8. nginx配置socket连接

    author: headsen  chen date:  2019-08-08 18:52:36 notice :个人原创 Nginx通过在客户端和后端服务器之间建立隧道来支持WebSockets通信 ...

  9. nginx配置长连接(ajax60秒请求超时)

    个人博客 地址:http://www.wenhaofan.com/article/20180911150337 1.在使用ajax做轮训的时候前台发出的ajax请求总是会在60秒之后返回405超时响应 ...

随机推荐

  1. MinGW下编译openssl, json-c

    目的:在windows环境下,编译开源库openssl 环境:windows 10 ,Mingw及自带msys工具,openssl-1.0.2j 工具主要使用MinGW(含msys1.0), IDE选 ...

  2. e779. 获得JList中的已选项

    The following methods return the indices of the selected items: // To create a list, see e774 创建JLis ...

  3. Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.【转】

    今天碰到了一个查询异常问题,上网查了一下,感谢原创和译者 如果你使用的数据库连接类是 the Data Access Application Blocks "SqlHelper" ...

  4. (转)Integrating Intel® Media SDK with FFmpeg for mux/demuxing and audio encode/decode usages 1

    Download Article and Source Code Download Integrating Intel® Media SDK with FFmpeg for mux/demuxing ...

  5. 开源轻量级分布式文件系统--FastDFS

    FastDFS一个高效的分布式文件系统 分布式文件系统FastDFS原理介绍 分布式文件系统FastDFS设计原理 FastDFS安装.配置.部署(一)-安装和部署 分布式文件系统 - FastDFS ...

  6. C# ThreadStart和ParameterizedThreadStart区别

    ThreadStart: ThreadStart这个委托定义为void ThreadStart(),也就是说,所执行的方法不能有参数.ThreadStart threadStart=new Threa ...

  7. js判断字符串是否json格式

    function isJSON(str) { if (typeof str == 'string') { try { var obj=JSON.parse(str); if(typeof obj == ...

  8. Hadoop学习笔记——WordCount

    1.在IDEA下新建工程,选择from Mevan GroupId:WordCount ArtifactId:com.hadoop.1st Project name:WordCount 2.pom.x ...

  9. 用C++做微信公众平台开发的后台开发时,用sha1加密验证的方法

    微信公众平台开发时,须要验证消息是否来自微信server,这要用到sha1加密算法.官网上给的是php的sha函数,C++中要用到以下这个函数: 一.引入头文件: #include<openss ...

  10. thinkphp3.2 session时间周期无效

    Thinkphp3.2 session周期时间默认是无效的 方法一: 这种方法使用session非常麻烦 1.配置'SESSION_AUTO_START' =>false,2.控制器方法sess ...