I am using http client 4.3. I use PoolingHttpClientConnectionManager
with many threads.
but I found one thread hangs on socketRead0(other thread is correct)
netstat -anotp|grep 5872
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 192.168.11.181:35251 192.168.11.169:61616
ESTABLISHED 5872/java off (0.00/0/0)
tcp 0 0 192.168.11.181:35252 192.168.11.169:61616
ESTABLISHED 5872/java off (0.00/0/0)
tcp 0 0 49.4.132.244:56035 221.204.231.139:80
ESTABLISHED 5872/java off (0.00/0/0)
tcp 0 0 192.168.11.181:41935 192.168.11.151:2181
ESTABLISHED 5872/java off (0.00/0/0)
java stack:
"Thread-51" prio=10 tid=0x00007f7dfc20d800 nid=0x1846 runnable
[0x00007f7d5c5c4000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:152)
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at
org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:136)
at
org.apache.http.impl.io.SessionInputBufferImpl.read(SessionInputBufferImpl.java:195)
at
org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:178)
at
org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:200)
at
org.apache.http.impl.io.ContentLengthInputStream.close(ContentLengthInputStream.java:103)
at
org.apache.http.impl.execchain.ResponseEntityWrapper.streamClosed(ResponseEntityWrapper.java:120)
at
org.apache.http.conn.EofSensorInputStream.checkClose(EofSensorInputStream.java:227)
at
org.apache.http.conn.EofSensorInputStream.close(EofSensorInputStream.java:174)
at org.apache.http.util.EntityUtils.consume(EntityUtils.java:88)
at
org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:222)
at
org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:160)
at
org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:136)
at
com.founder.httpclientfetcher.HttpClientFetcher.httpGet(HttpClientFetcher.java:464)
I am using 4.3.1
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.1</version>
</dependency>
my codes:
defaultRequestConfig = RequestConfig
.custom()
.setCookieSpec(CookieSpecs.BEST_MATCH)
.setExpectContinueEnabled(true)
.setConnectTimeout(this.getConnectTimeout())
.setConnectionRequestTimeout(this.getConnectionRequestTimeout())
.setSocketTimeout(this.getReadTimeout()).build();
HttpClientBuilder builder = HttpClients.custom();
ConnectionKeepAliveStrategy myStrategy = null;
HttpClientConnectionManager connManager = null;
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder
.<ConnectionSocketFactory> create()
.register("http",
PlainConnectionSocketFactory.getSocketFactory())
.register("https",
SSLConnectionSocketFactory.getSocketFactory())
.build();
connManager = new PoolingHttpClientConnectionManager(
socketFactoryRegistry, null, new DNSResolverWithCache(
dnsCache));
((PoolingHttpClientConnectionManager) connManager).setMaxTotal(this
.getMaxTotalConnection());
((PoolingHttpClientConnectionManager) connManager)
.setDefaultMaxPerRoute(this.getMaxConnectionPerRoute());
myStrategy = new ConnectionKeepAliveStrategy() {
public long getKeepAliveDuration(HttpResponse response,
HttpContext context) {
// Honor 'keep-alive' header
HeaderElementIterator it = new BasicHeaderElementIterator(
response.headerIterator(HTTP.CONN_KEEP_ALIVE));
while (it.hasNext()) {
HeaderElement he = it.nextElement();
String param = he.getName();
String value = he.getValue();
if (value != null && param.equalsIgnoreCase("timeout")) {
try {
return Long.parseLong(value) * 1000;
} catch (NumberFormatException ignore) {
}
}
}
return HttpClientFetcher.this.defaultKeepAlive;
}
};
builder.setKeepAliveStrategy(myStrategy);
client = builder.setConnectionManager(connManager)
.setProxy(getProxy())
.setRetryHandler(new MyHttpRequestRetryHander(retryCount))
.setDefaultRequestConfig(defaultRequestConfig)
.setUserAgent(this.getUserAgent()).build();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]