我有一个Java程序创建多个线程,其中每个线程发出POST请求。它在大多数情况下都能正常工作,但是在负载较重的情况下,它会引发Connection reset异常。例如,当我发出40个同时请求时,几次我得到Connection重置异常。HttpClient的executeMethod抛出java.net.SocketException:连接重置
Caught: java.net.SocketException: Connection reset
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105
at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.
at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMetho
at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodB
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.j
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(Htt
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMe
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.jav
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.jav
在我的Java代码,当我提出一个请求等待它完成,然后再拍要求我创建的HttpClient的
HttpClient client = new HttpClient();
实例中的问题不会发生。但是,当我将程序转换为多线程时,我遇到了这个问题。
任何人都可以请指出我怎样才能防止这种异常,然后再次重试。从谷歌,我发现答案可能是沿着使用
org.apache.commons.httpclient.util.IdleConnectionTimeoutThread
我想在此同时使用这一点,但其他任何建议,欢迎的线路。
是否有任何日志服务器端可能会给你一个线索,为什么会发生这种情况? – Nattrass 2014-10-20 20:45:25