Apache HttpComponents在多次请求后超时

时间:2014-07-10 20:08:04

标签: java multithreading apache-httpclient-4.x resource-leak

我使用带有PoolingHttpClientConnectionManager的HttpClient 4.3和两个连接到REST API的线程。两者都是永久发送请求。它运行良好几分钟,但随后,请求开始超时。浏览时,即使Chrome无法与网站建立连接。这是我发送请求的代码:

String sendGETApache(HttpGet httpGet) {
    try {
        CloseableHttpResponse response = httpClient.execute(httpGet); //, httpContext);
        HttpEntity entity = null;
        try {
            entity = response.getEntity();
            if(entity != null) {
                String s = EntityUtils.toString(entity);
                return s;
            }
        }   catch (Exception e) {
            e.printStackTrace();
            httpGet.abort();
        } finally {
            EntityUtils.consume(entity);
            response.close();
        }
    } catch (Exception e) {
        httpGet.abort();
        e.printStackTrace();
    } finally {
        httpGet.releaseConnection();
    }
    return "";
}

HttpClient是一个唯一的对象,在两个线程之间共享。 我已经尝试将DefaultMaxPerRoute和MaxTotal限制为1和2,我甚至使用了非常大的值,没有结果。 我甚至实现了一个额外的线程,它反复调用closeExpiredConnections()和closeIdleConnections(),也没有改进。 你知道我能做什么吗?我觉得某处资源漏水了,但我不知道...... 谢谢

0 个答案:

没有答案