阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx 72万连接性能测试

94次阅读
没有评论

共计 5045 个字符,预计需要花费 13 分钟才能阅读完成。

根据系统内存 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

Nginx 72 万连接性能测试

Nginx 72 万连接性能测试

Nginx 72 万连接性能测试

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

Nginx 72 万连接性能测试

Nginx 72 万连接性能测试

Nginx 72 万连接性能测试

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 实现反向代理和负载均衡的配置及优化 http://www.linuxidc.com/Linux/2013-11/92909.htm

 

Nginx 做负载均衡报:nginx: [emerg] could not build the types_hash http://www.linuxidc.com/Linux/2013-10/92063.htm

 

Nginx 负载均衡模块 ngx_http_upstream_module 详述 http://www.linuxidc.com/Linux/2013-10/91907.htm

 

Nginx+Firebug 让浏览器告诉你负载均衡将请求分到了哪台服务器 http://www.linuxidc.com/Linux/2013-10/91824.htm

 

Ubuntu 安装 Nginx php5-fpm MySQL(LNMP 环境搭建) http://www.linuxidc.com/Linux/2012-10/72458.htm

 

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

预设 tengine 最大 72 万连接,由于做反向代理,支持最大连接数在 36 万。

7 台 Client 用 httperf,每个连接 10 次 request,GET 10KB html。

QPS

并发连接

MaxCpu(%)

MaxMem

NginxMem(MB)

SocketMem(MB)

29.7K

146.5K

76.12

3.2G

1145.91

489

49.0K

244.1K

91.59

5.1G

2268.34

791

59.0K

293.0K

96.01

6.1G

2907.67

1140

71.4K

341.8K

97.49

7.0G

3341.7

1160

 
 
 
 
 
 
 

 

 

如果超过预设连接数,每台建 6 万连接,共 42 万:

QPS

并发连接

MaxCpu(%)

MaxMem

NginxMem(MB)

SocketMem(MB)

73.1K

375.9K

97.57

8.2G

4047.15

1408

Nginx 72 万连接性能测试

Nginx 72 万连接性能测试

Nginx 72 万连接性能测试

17:05:14:
开始建立连接,CPU 利用率迅速升高。
17:05:22:
连接达到预置上限(72 万 /2 = 36 万),平均 CPS= 4 万。系统内存占用达到最大 8.2G,平均每个连接(8.2-1.4)/ 72 = 9.9K (10K),Nginx Worker 进程占用内存达到 4G。同时对于超过 36 万的新建连接,主动断链,出现 TimeWait 状态连接 3.4 万个左右。

整个过程中内存占用和 CPU 利用率在安全范围内。

根据系统内存 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

Nginx 72 万连接性能测试

Nginx 72 万连接性能测试

Nginx 72 万连接性能测试

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

Nginx 72 万连接性能测试

Nginx 72 万连接性能测试

Nginx 72 万连接性能测试

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 实现反向代理和负载均衡的配置及优化 http://www.linuxidc.com/Linux/2013-11/92909.htm

 

Nginx 做负载均衡报:nginx: [emerg] could not build the types_hash http://www.linuxidc.com/Linux/2013-10/92063.htm

 

Nginx 负载均衡模块 ngx_http_upstream_module 详述 http://www.linuxidc.com/Linux/2013-10/91907.htm

 

Nginx+Firebug 让浏览器告诉你负载均衡将请求分到了哪台服务器 http://www.linuxidc.com/Linux/2013-10/91824.htm

 

Ubuntu 安装 Nginx php5-fpm MySQL(LNMP 环境搭建) http://www.linuxidc.com/Linux/2012-10/72458.htm

 

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计5045字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中