views:

144

answers:

1

Hi, I have a thread running under tomcat which creates a HttpUrlConnection and reads it through BufferedInputStream.

After fetching data for some urls, it stalls. I got the jstack of the process which says HttpUrlConnection is locked and BufferedInputStream is also locked.

"http-8080-1" daemon prio=10 tid=0x08683400 nid=0x79c9 runnable [0x8f618000]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
        - locked <0x956ef8c0> (a java.io.BufferedInputStream)
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1072)
        - locked <0x956ef910> (a sun.net.www.protocol.http.HttpURLConnection)

Could somebody help here. Thanks

+1  A: 

You probably have a problem on the other end. read() on an InputStream is a blocking operation - from the javadoc (http://java.sun.com/javase/6/docs/api/): "This method blocks until input data is available, the end of the stream is detected, or an exception is thrown."

Is the server on the other end responding? Do you know if it's sent anything?

edit: To make it clearer, the thread is in RUNNABLE state, so you're not deadlocked - it sounds like that's what you're thinking that it is, but there's no evidence here of any deadlock.

nojo
From the log it seems that it is reading from some xyz url. I tried with wget and could quickly get the response. I am not sure for what reason would the read() block.One more thing, I imported `java.net.HttpURLConnection` but the stack trace shows some other package. Any clue?
Nayn
I would suggest trying Apache's HTTP Client: http://hc.apache.org/httpclient-3.x/ instead of Sun's. I don't have experience with either, but some quick searching suggests that Apache's is much better.
nojo