部署在windows上的web服务器高并发时卡顿

服务端架构:Springboot web工程,mybatis连接数据库,c3p0连接池连接数据库。

测试工具:jmeter

单线程访问(单客户端)

总访问次数:289,803次,返回81631次,耗时8分50秒。并发量546次/秒

问题描述:

16300次后卡顿  

32000次后卡顿

48000次后卡顿

65294次后卡顿

81631次后卡顿

...

响应时序图

部署在windows上的web服务器高并发时卡顿

问题现象:接口周期性的连不上。

 

10客户端同时访问(同时开启10个线程)

总访问次数:281,714次,返回81631次,耗时8分50秒。并发量531次/秒

问题描述:

16023次后卡顿  

32281次后卡顿

48551次后卡顿

64842次后卡顿

81128次后卡顿

...

响应时序图

部署在windows上的web服务器高并发时卡顿

问题现象:可以发现客户端数量不影响测试结果。

 

更换连接数据库池的中间件,c3p0改成druid连接池

单线程访问(单客户端)

总访问次数:269,896次,返回81655次,耗时8分50秒。并发量509次/秒

问题描述:

16121次后卡顿  

32251次后卡顿

48486次后卡顿

64784次后卡顿

81655次后卡顿

可以发现不同的连接池不影响测试结果。

修改连接池最大连接数20改成200

问题描述:

17307次后卡顿  

33629次后卡顿

48486次后卡顿

64784次后卡顿

82631次后卡顿

真正的原因:window的tcp连接太多,由于大量的TIME_WAIT连接未被释放,导致占用的端口资源一直未被回收,出现了缓冲区空间不足的问题,应用也总是自动断线。

解决方案:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

“MaxUserPort”=dword:0000fffe

“TcpTimeWaitDelay”=dword:0000005 (缩短为5秒)