【问题标题】:Java HttpsURLConnection outbound limit?Java HttpsURLConnection 出站限制?
【发布时间】:2012-01-09 15:40:47
【问题描述】:

我正在创建一个测试应用程序,通过创建一堆出站 https 连接(每个在自己的线程中循环)来负载测试彗星 servlet。

并发出站http请求的数量有限制吗?如果是这样,是操作系统级别的问题(xp 32 位)还是 Java?运行大约 100 个连接时出现以下异常。该错误不会立即发生,而是在 50-150 次循环(有时更多)之后发生,导致我怀疑实际上可能是我没有正确释放资源:

java.net.BindException: Address already in use: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:559)
    at         com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141)
 at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
 at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
 at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
 at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:272)
 at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:329)
 at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:172)
 at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:916)
 at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:158)
 at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1177)
 at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
 at fqexconnectiontesting.FQEXHttpClient.run(FQEXHttpClient.java:158)
 at java.lang.Thread.run(Thread.java:662)

我的代码:

while(true){
try{                    
connection =(HttpsURLConnection) url.openConnection();                    
connection.setDoOutput(true);
connection.setRequestProperty("keep-alive", "true");
connection.setRequestMethod("GET");
input = new DataInputStream( connection.getInputStream() ); 
b = new byte[4096];                    
totalBytes += input.read(b);                    
input.close();
b = null;         
connection.disconnect();                                        
connection = null;
Thread.sleep(100);
}

任何想法表示赞赏。

谢谢, 炫酷

【问题讨论】:

    标签: java https


    【解决方案1】:

    默认情况下,Java 最多只能打开 5 个到同一主机的持久连接。 但是您的代码使用了 AFAIK 阻止持久连接的 disconnect() 方法。

    您最好阅读有关Persistent Connections 的文档。获取接近尾声的示例代码以获得完全有效的持久连接。

    也许这能解决你的问题。

    【讨论】:

    • 谢谢,断开连接似乎是必需的。解决它的方法是将 http.maxConnections 设置为更高的数字。
    猜你喜欢
    • 2011-10-02
    • 2016-11-05
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2022-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多