一、java.net.BindException: Address already in use: connect
1、释放端口
1、取消JMeter-HTTP请求Use KeepAlive设置
2、更改Windows注册表中默认的TCP/IP端口数量
使用cmd输入regedit进入到负载机的注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
在Parmeters右键新建DWORD值,命名为MaxUserPort,然后选择十进制并输入数据65534后保存
完成上述操作后重启负载机,结束!
2、释放端口第二种--网上释义
短时间内new socket操作过多
而socket.close()操作并不能立即释放绑定的端口
而是把端口设置为TIME_WAIT状态
过段时间(默认240s)才释放(用netstat -na可以看到)
最后系统资源耗尽
(windows上是耗尽了pool of ephemeral ports 这段区间在1024-5000之间)
3、释放端口第三种--网上释义
大概原因是短时间内new socket操作很多,而socket.close()操作并不能立即释放绑定的端口,而是把端口设置为TIME_WAIT状态,过段时间(默认240s)才释放,(用netstat -na可以看到),最后系统资源耗尽(windows上是耗尽了pool of ephemeral ports ,这段区间在1024-5000之间; )
避免出现这一问题的方法有两个,一个是调高你的 web服务器的最大连接线程数,调到1024,2048都还凑合,以resin为例,修改resin.conf中的thread-pool.thread_max,如果你采用apache连resin的架构,别忘了再调整apache;
另一个是修改运行web服务器的机器的 操作系统网络配置,把time wait的时间调低一些,比如30s。
在red hat上,查看有关的选项,
4关闭防火墙-网上释义
解决方案:
1.windows防火墙-->允许程序或功能通过windows防火墙-->勾上不能访问程序(java(TM) Plaform SE binary:如果找不到使用第二种解决方案)-->确定 --->完成
2.windows防火墙-> 关闭防火墙---->重新启动你先前使用不起的程序,这时可以了(为了安全, 最好将防火墙开启)--->开启防火墙 -->防火墙将询问你是否*程序访问网络(如果有多个网络,这时你得选择你正在使用的网络)--->完成
3.高级设置:
例如:mysql的远程访问,ip就是ping得通,它就是不能访问,纠其原因,端口被killer了,开放myslq端口即可访问
发生的原因: 防火墙阻止程序访问网络
网络更换后, 防火墙 将启用新的防火墙规则--什么都没有, 这样,更换后所有再访问网络的程序--防火墙都将视为新程序--这时, 要你定义的新的防火墙规则 --询问你:是否允许*程序访问正在使用的网络-->是否由你决定
5网上释义-没有操作验证
loadrunner进行压力测试的时候,脚本通过socket连接服务器,偶尔loadrunner会报如下的错误:java.net.ConnectException: Connection refused,Connection timed out:connect;java.net.BindException:Address already in use: connect。除了网上说的由于本地socket开得过多,导致socket不够用的情况,也根据操作修改了注册表,但压测时还是会有错误。
解决办法:https://blog.youkuaiyun.com/weixin_44256848/article/details/91384018
按照操作都改了,还是会报错误,根据这个思路,理解根本原因是socket不够用,为啥不够用,看了一下服务响应时间都是几毫秒,实在太快了,电脑没做过什么专门配置是跟不上的。因为本身这个压测是测试高可用,没追求性能,故把服务处理时间sleep一会儿,loadrunner相关异常就不在报了。
6,一些配置文件的修改
通过修改JMeter系统配置文件:
{JMeter 主目录}\bin\system.properties,将 java.net.preferIPv4Stack 设置为 true 即可。
二、java.net.SocketException: Socket closed
1、设置连接的超时时间。
如果在 HTTP Request Sampler 的 Basic 里勾选了Use KeepAlive,那么建议在 Advanced 页签下:
1、Implementation 选为 HttpClient4
2、Timeouts 中的 Connect 一般设置一个10~60秒的值,表示连接的空闲超时时间,避免由于没收到被压测端的响应回来的 Keep-Alive 的 Header 导致的连接断开
这个值的单位是毫秒:15s*1000=15000s
通过上述方法设置后,再次压测,还是会出现这个错误
再次百度,
https://cwiki.apache.org/confluence/display/jmeter/JMeterSocketClosed?spm=a2c4g.11186623.2.16.41ff41eaJzLjlR
将httpclient4.retrycount=0 改为 =1
2、jmeter压测-java.net.SocketException:Socketclose。。。 - 百度文库
此种方式未经验证,只是查询到有此可能
三java.net.SocketException: Connection reset
四报500错误
五报502错误
六报304错误
三四五六见其他文章
七java.net.SocketException: Socket closed
未设置超时连接数
设置如上
过程中碰见其他博主遇见的问题【java.net.SocketException四大异常解决方案】,仅记录,参考链接
java.net.SocketException四大异常解决方案_一生挚爱妹子的博客-优快云博客_java.net.socketexception