📚前言
近期雪雪妹妹在使用Jmeter执行压测的时候,发现了一个非常让她头疼的问题,她使用20并发跑,正确率可以达到100%,但是一旦使用200并发,就会出现大量的报错,报错内容如下:
java.net.BindException: Address already in use: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:368)
📚原因分析
这个报错的原因是windows本身提供的端口数量是有限的,使用Jmeter发送大量请求的时候,端口被大量占用,并且要四分钟来循环回收他们,这就导致我们在短时间内跑大量的请求时将端口占满啦。
📚如何解决呢?
1.进入注册表
打开cmd窗口,输入regedit,进入到注册表。
2.创建DWORD
进入到 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 目录,新建项,名字改为:DWORD
3.设置MaxUserPort
在DWORD上右键,新建32位值,选择十进制,输入数值65534,重命名为MaxUserPort。
4.设置TcpTimedWaitDelay
继续创建一个名为TcpTimedWaitDelay的32位值,值设置为十进制的30:
以上操作,增大了可分配的tcp连接端口数、减小了处于TIME_WAIT状态的连接的生存时间。然后我们重启电脑!
5.调整Jmeter.bat
修改Jmeter.bat文件中的这一行:
在最后增加 -Dsun.net.tryReuseAddr=true
tryReuseAddr这个命令是让你可以复用处于 TIME_WAIT 状态的端口,可能会有助于解决端口冲突导致的绑定异常问题。
6.重启电脑
再次验证,在高并发场景下就不再报错啦!
📚附加方案
一般情况下使用如上方案就足矣啦,如果还是发现报错,可以尝试增加这些配置项,精准调整连接数控制相关的各项配置:
相关的文件我放在资源库啦!各位可以自行去下载!
用于解决Jmeter java.net.BindException: Address already in use: connect报错的DWORD注册表文件
✍结尾
🀙🀚🀛🀜🀝🀞🀟🀠🀡🀐🀑🀒🀓🀔🀕🀖🀘🀗🀏🀎🀍🀌🀋🀊🀉🀈🀇🀆🀅🀃🀂🀁🀀🀄︎🀢🀣🀥🀤🀦🀧🀨🀩🀪
如果完成所有配置,还是发现报错,那可能是你用的并发量确实太高啦,这种情况下可以尝试使用Jmeter集群,解决此问题。
📘 妹妹听后点了点头,脸上露出了满意的笑容。她轻声说道:“原来如此,谢谢你,鸽鸽。看来我不仅要多读书,还要多动手实践,提升自己才行。”
看着她那充满求知欲的眼神,我不禁感叹,学习之路虽然充满挑战,但有这样一位美丽聪慧的伙伴相伴,一切都变得格外有意义。快去和妹妹一起实践一下吧!
笔者 綦枫Maple 的其他作品,欢迎点击查阅哦~:
📚Jmeter性能测试大全:Jmeter性能测试大全系列教程!持续更新中!
📚UI自动化测试系列: Selenium+Java自动化测试系列教程❤
📚移动端自动化测试系列:Appium自动化测试系列教程
📚Postman系列:Postman高级使用技巧系列
👨🎓作者:綦枫Maple
🚀博客:CSDN、掘金等
🚀CSDN技术社区:https://bbs.csdn.net/forums/testbean
🚀网易云:https://y.music.163.com/m/user?id=316706413
🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。
🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系处理。
🀐其他:若有兴趣,可以加页面左侧的《Java自动化技术交流屋》探讨学习哦~