jmeter测试报错

1 java.net.BindException: Address already in use: connect

当线程数持续上升到一个点的时候,运行脚本的时候有很多报错,如图:
java.net.BindException: Address already in use: connect
通过 netstat -a 命令查看,有一大堆状态为 TIME_WAIT 的占用连接不被释放

开始以为是单机运行脚本运行不过来,所以另加了一台负载机同时运行脚本
分布式环境部署参考:
https://www.cnblogs.com/whitewasher/p/6946207.html

但是依然还是会报错,后面查阅了相关资料后发现,是因为windows本身提供的端口访问机制的问题。
Windows XP提供给 TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收他们。就导致我们在短时间内跑大量的请求时将端口占满了。

解决方案为:

  1. cmd中,用regedit命令打开注册表
  2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下,右击parameters,添加新的DWORD(如果是分布式运行的话,控制机器和负载机器都需要这样操作哦)
    - 新建`DWORD`值,name:`TcpTimedWaitDe`,value:`30(十进制)`  –> 设置为30秒,默认是240秒
    - 新建 `DWORD`值,name:`MaxUserPort`,value:`65534(十进制)`–> 设置最大连接数65534
    
  3. 修改配置完毕之后记得重启机器才会生效

参考资料:
https://www.cnblogs.com/pgf622/p/9109521.html
https://blog.csdn.net/zoulonglong/article/details/80940411
https://blog.csdn.net/lifuxiangcaohui/article/details/40188847

2 java.net.SocketException: Socket closed

如题,jmeter报出java.net.SocketException: Socket closed,我查询了下,服务器是正常的,可以返回数据,基本确定问题出在我这边jmeter。查询原因,看到有人说:该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了Socketclose方法)再对网络连接进行读写操作。

Socket closed

Non HTTP response code: org.apache.http.NoHttpResponseException (the target server failed to respond)

资料查询:https://wiki.apache.org/jmeter/JMeterSocketClosed

问题原因:在JMeter下,发送http 请求时,一般都是默认选择了use keepAlive(这个是什么?看后面资料),这个是连接协议,JMeter坑就在这里,默认勾选了这个(如果不勾选的话,也不会保存),但其配置JMeter.properties中的时间设置默认却是注销的,也是是说,不会等待,一旦连接空闲,则立马断开了,导致我们压测中出现了事务失败的情形。
1

解决方案:修改httpclient4.idletimeout=<time in ms> 设置成自己觉得合理的时间,一般可设置成10-60s(表示连接空闲10s后才会断开),注意这边单位是ms。修改完成后再次压测,错误不再有了。
2

3 java.net.SocketException: Connection reset

参考资料:https://www.cnblogs.com/shoren/p/httpclient-connectionreset.html

-------------本文结束感谢您的阅读-------------

本文标题:jmeter测试报错

文章作者:OperationMAN

发布时间:2019年08月13日 - 17:08

最后更新:2022年06月05日 - 21:06

原始链接:https://kxinter.gitee.io/2019/08/13/jmeter测试报错/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!