Jmeter测试时为什么会出现地址被占用(Address already in use)?

2025年11月16日 20:04
6 阅读
0 评论
0

 在使用Jmeter进行压力测试时,当tps请求过高时就会出现大量的Address already in use错误,空闲时间了解了下原理,原因在于tcp端口不够用导致的。

单台windows最大tcp端口是65535个(默认1024个),客户端每发一次请求就会占据一个端口,如果超出这个数量或者说tcp端口释放比较的慢,就会出现被占用的错误。

JMeter默认是使用短链接方式(关闭 Keep-Alive)进行请求的,windows中端口默认释放时间是120s,即使这个请求结束后,如果还没到达端口释放的时间,这个端口会一直被占用状态。

Jmeter测试时为什么会出现地址被占用(Address already in use)?

如何避免?

1、多机负载

使用两台或更多的机器进行负载测试;

2、虚拟机

原理和多机负责其实是一个,只不过如果只有一台电脑,那这个时候我们就可以考虑开虚拟机的方式进行,当然要保证你的机器配置足够,否则即使用负载的方式进行也会因为资源不够导致结果不准确或者报错超时。

3、开启Keep-Alive

Jmeter测试时为什么会出现地址被占用(Address already in use)?
打开Jmeter中的Keep-Alive后,可以让请求保持长链接的状态,而不是请求完就断开。

4、修改Time_wait、最大连接数

windows默认连接数1024个,这里将windows默认的tcp释放时间缩短,将tcp默认链接数量设置最大,在windowsregedit注册表中修改即可

cmd输入regedit进入到负载机的注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters路径:
Jmeter测试时为什么会出现地址被占用(Address already in use)?
Parmeters右键新建DWORD值,命名为MaxUserPort,然后选择十进制并输入数据65534后保存
Jmeter测试时为什么会出现地址被占用(Address already in use)?

在同样的注册表位置新建TcpTimeWaitDelay,值类型DWORD,数值数据为5s(时间可以更短)
Jmeter测试时为什么会出现地址被占用(Address already in use)?

确定后重启测试机即可。

下一篇 →Linux 基础权限学习(rwx-)

评论