# jmeter报错java.net.BindException: Address already in use: connect
2 min read
java.net.BindException: Address already in use: connect at java.base/java.net.PlainSocketImpl.connect0(Native Method) at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:101) at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242) at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224) at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403) at java.base/java.net.Socket.connect(Socket.java:591) at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75) at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142) at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl$JMeterDefaultHttpClientConnectionOperator.connect(HTTPHC4Impl.java:336) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:374) at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393) at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185) at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:843) at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:574) at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:67) at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1231) at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1220) at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:622) at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:546) at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253) at java.base/java.lang.Thread.run(Thread.java:835)如果报如上错误,可能是因为发送请求时,端口被占用(应该是端口不够用了)
问题原因:操作系统会为TCP/IP服务预留临时端口,Jmeter在跑并发测试的时候每开启一个线程(new socket操作)就会占用一个临时端口,若TCP/IP端口被占完了,而且没有及时释放(socket.close()操作不能立即释放绑定的端口,而是把端口设置为TIME_WAIT状态,过段时间才会真正释放,默认是240s),就会出现Java.net.BindException: Address already in use: connect这种情况。
解决办法:
加快被占用端口的释放速度
原文链接:
https://blog.csdn.net/liuzhenwen/article/details/89354901
上面的方法对于阿里云服务器来说,相关文件配置位置可能不一样,使用阿里云官方说明:
通过以下两种方式,修改内核参数。注:调整内核参数后,内核处于不稳定状态,请务必重启实例。执行如下命令,临时修改内核参数。/sbin/sysctl -w kernel.parameter="[$Example]"注:[$Example]为参数值,如sysctl -w net.ipv4.tcp_tw_recycle="0"命令,将参数值改为0。通过修改配置文件的方式修改内核参数。执行如下命令,修改/etc/sysctl.conf文件中的参数。vi /etc/sysctl.conf执行如下命令,使配置生效。/sbin/sysctl -p