Nginx 72万连接性能测试(一)

转自: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万连接性能测试(一)

时间: 2024-08-10 04:18:25

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

十几万连接几M的流量,吓死“宝宝”了

某局点升级(nginx变ats,同时去掉前端的nginx负载层),升级之后服务就不正常,硬生生的看着十几万连接,没有流量,各种排错,可谓是把心提到嗓子眼惊心动魄的半小时,虽然做了很好的业务机制,服务不正常用户可以直接回源,不过对于我们的流量而言肯定是个锯齿了,回顾一下排查过程. 升级过程不说了,升完后对业务配置.健康心跳.磁盘设置.DNS简单做了检查,没发现问题.接下来就是切流量过来,前端的DNS按照域名哈希将请求分发过来,流量迅速到了100M还在上升,连接数到了几万(域名质量不好,很多动态的,

100万连接测试资料整理

设置相关脚本: 默认: $cat /proc/sys/net/ipv4/ip_local_port_range 32768    61000 $cat setting.sh #/bin/bash # modify backlog, meanwhile change listen function to 1024, default 128 # echo “1024" > /proc/sys/net/core/somaxconn sysctl -w net.core.somaxconn = 1

Linux-rhel6.4 编译安装PHP,Nginx与php连接

确定依赖包安装 gcc gcc-c++ libxml2 libxml2-devel bzip2 bzip2-devel libmcrypt libmcrypt-devel openssl openssl-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel readline readline-devel libxslt-devel perl perl-devel psmisc.x86_64 recode recode-deve

nginx的web连接出现过多的TIME_WAIT

sysctl -a命令可以查看系统中的内核参数 所有的这些参数对应着是/proc/sys/下面的文件 将/proc/sys中的文件转换成sysctl中的变量依据下面两个简单的规则: 1.去掉前面部分/proc/sys 2.将文件名中的斜杠变为点 例如: /proc/sys/net/ipv4/ip_forward => net.ipv4.ip_forward /proc/sys/kernel/hostname => kernel.hostname nginx的web连接中出现过多的TIME_WA

Nginx如何处理一个连接

Nginx如何处理一个连接 Nginx作为服务器 1 启动 首先,nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址 然后,nginx的master进程里面,先初始化好这个监控的socket(创建socket--设置addrreuse等选项--绑定到指定的ip地址端口--在listen),然后再fork出多个子进程出来,然后子进程会竞争accept新的连接. 此时,客户端就可以向nginx发起连接了. 2 客户端向Nginx发起连接 首先:当客户端与nginx进行三次握手,与ngi

nginx 的限制连接模块limit_zone与limit_req_zone

原文地址: http://storysky.blog.51cto.com/628458/642970/ nginx 上有两个限制连接的模块一个是 limit_zone 另一个是 limie_req_zone,两个都可以限制连接,但具体有什么不同呢?下面是 nginx 官网上给的解释limit_req_zoneLimit frequency of connections from a client. This module allows you to limit the number of req

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

环境: 操作系统:centos 6.5 x64 cpu:32 core 内存:  32G web服务器:tomcat 6.x jdk :1.6x 测试环境: 操作系统:centos 6.5 x64 cpu:32 core 内存:  32G ab 作为性能测试工具 在做性能测试之前,对客户端和服务端均进行服务端优化(linux文件句柄数.socket 等网络参数).在服务端,针对tomcat connector 进行bio 短连接和bio长连接分别进行测试,具体参数在这里不详细介绍.请求页面4k大

Nginx APP接口连接超时

内网有一台APP服务器,接口是通过Nginx发布的.手机通过无线登陆APP,有时候提示连接超时. 无线路由器和APP服务器,是通过内网交换机连接的.应该不会超时啊,可能是路由器问题. 然后换了好几个路由器,小米mini,华硕RT-AC87U,TP-LINK WVR1750G 咨询厂商,测试了一下,当时超时的时候,访问百度视频什么的是正常的.路由器没有问题,可能是服务器问题.因为服务器是pc机主机,配置比较差,后来换成DELL R620,还是同样的问题. 因为公司周围有30几个无线,2.4G传输速

Nginx作为前端连接后端keep-alive问题解决

为了应付大量用户请求,我们的网站加入了Varnish作为中间Cache.上线后使用varnishstat查看client_conn比client_req高很多,导致varnish产生大量TIME_WAIT.开始以为是Nginx没有开启keep-alive的原因,开启后继续观察了一段时间效果不是很明显.通过varnishlog查看发现http 1.0的链接为Connection 为close.查阅nginx官方ngx_http_upstream_module模块文档,官方建议proxy_http_