在使用jmeter进行压力测试时发现一个很奇怪的问题,在发压开始30秒左右会突然出现http访问失败,访问失败过三四分钟会恢复,持续发压是现象不断的重复。导致tps出现很规律的锯齿状曲线,跟长城的垛口一样。 在出现访问异常是可以看到Java.net.BindException: Address already in use: connect 的报错 在网上查询看到说是本地端口大量的’TIME_WAIT’无法释放导致jmeter无端口无法建立新的连接。 通过使用Windows下的netstat命令查看当前连接情况 netstat -ano 可以看到当前的全部连接数,可以看到报错的时候所有本地端口都被占用了。 使用netsh int ipv4 show dynamicportrange tcp 命令可以看到当前的tcp端口使用范围 上网查了一下TIME_WAIT的默认保持时间是2msl 4分钟,可以通过修改注册表来缩短时间,并且可以通过修改注册表来扩大可用端口数量。 调整端口使用范围方法可以参考微软官网的说明
https://docs.microsoft.com/en-us/troubleshoot/windows-server/networking/default-dynamic-port-range-tcpip-chang 使用命令方式调整tcp端口范围
调整tcp TIME_WAIT时间可以通过修改注册表实现 可以参考调整官网关于调整TIME_WAIT说明
调整这个值按照官网说明是有最小限制的,不能小于30,我最开始写了个特别小的结果就没生效还以为是配错了 这两个参数调整完了之后jmeter压力测试好了很多,但是仍然会有一个时间点几乎将所有端口占用完,虽然很快释放了,但是现象台奇怪了。 测试了其他电脑都没出现过这个情况。 后续只能继续再查了。本文待续
|