【发布时间】:2011-06-10 04:01:58
【问题描述】:
我正在尝试通过打开大量与服务器的套接字连接、身份验证、关闭连接然后重复来对 Java 服务器进行负载测试。我的应用运行了一段时间,但最终我得到:
java.net.BindException:地址已在使用中:连接
根据我阅读的文档,原因是关闭的套接字在调用 close() 后仍然占用分配给它们的本地地址一段时间。这取决于操作系统,但可能需要几分钟。我尝试在套接字上调用setReuseAddress(true),希望在调用close() 后它的地址可以立即重用。不幸的是,情况似乎并非如此。
我的套接字创建代码是:
Socket socket = new Socket();
socket.setReuseAddress(true);
socket.connect(new InetSocketAddress(m_host, m_port));
但我仍然收到此错误:
java.net.BindException:地址已在使用中:稍后连接。
还有其他方法可以完成我想做的事情吗?例如,我想:打开 100 个套接字,全部关闭,打开 200 个套接字,全部关闭,打开 300 个等等。最多 2000 个左右的套接字。
任何帮助将不胜感激!
【问题讨论】:
-
是服务器还是客户端抛出了异常?连接数一致后是否会发生这种情况?
-
您可能需要更改机器的 TCP 设置,请参阅docs.alfresco.com/4.0/topic/com.alfresco.enterprise.doc/tasks/…
标签: java sockets networking tcp