Nginx 72万连接性能测试

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

 

clip_image002

clip_image004

clip_image006

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

 

clip_image008

clip_image010

clip_image012

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监控无数据。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/6649eb2dd64ac40b5ce158e04babf9bb.html