Hm,

hard to say. Did you use tcpdump to check if data is transfered or
did you straced the java process? And you can check more socket stats
with /sbin/ss -eomipt

Bernd


 Am Fri, 18 Apr 2014 09:23:21 +0800
schrieb Li Li <fancye...@gmail.com>:

> hi all
>     sorry to post a not-dev problem here. because I can't find any
> active forum(few people use oracle's Networking now).
> 
>     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 have asked this question in httpclient mailing list and get
> this answer: Assuming that this.getReadTimeout() returns a positive
> value, the read operation can still block indefinitely if the server
> keeps on sending packets often enough to prevent the operation from
> exceeding the socket timeout value.
>     And I also goolged a stackover question:
> http://stackoverflow.com/questions/15874834/httpclient-hangs-on-socketread0-with-successfully-executed-method
> 
> I have all the timeouts setup just fine but I found out we have on url
> that does http chunking but sends no results(works fine in chrome, but
> in http client it hangs forever even with the timeout set). Luckily I
> own the server and just return some garbage and it no longer hangs.
> This seems like a very unique bug in that http client does not handle
> some kind of empty chunking case well(though I could be way off)....I
> just know it hangs every time on that same url with empty data and
> that url is http chunking csv download back to our http client.
> 
> is this reason causing my thread hang?
> any solution for this?

Reply via email to