Java socketRead0 Problem

Ich bin der Entwicklung einer web-cralwer mit htmlunit und ich habe alle erforderlichen timeout, aber ich merke, dass die app hängt sich auf, wenn der server, der die website gecrawlt wurde nicht reagiert, wenn ich den Java VisualVM zu tun, einen thread dump:

java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.net.SocksSocketImpl.readSocksReply(SocksSocketImpl.java:88)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:429)
at java.net.Socket.connect(Socket.java:525)
at com.gargoylesoftware.htmlunit.SocksSocketFactory.connectSocket(SocksSocketFactory.java:89)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:776)
at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:152)
at app.plugin.core.net.QHttpWebConnection.getResponse(QHttpWebConnection.java:30)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1439)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1358)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:307)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:373)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:358)

Dies ist wirklich frustrierend, da ich haben keine Kontrolle über diese Server. Dieses Problem ist ernst, die die performance meiner Anwendung.

Frage:

  1. Wie kann ich dieses Problem lösen?
  2. Gibt es eine Möglichkeit um eine Liste von socket-Verbindung geöffnet, indem eine Java-app, und verwenden, beenden Sie die Steckdose, wie simluate, dass der server die Verbindung geschlossen?
  • Wie wollen Sie, dass der thread gesperrt wird? sein status wird als lauffähige. Wenn es blockiert wurde, wäre es gewesen, "Wartend" oder "Gesperrt".
  • Offensichtlich haben Sie nicht alle benötigten timeouts 😉 Kann Sie zeigen, welche timeouts Sie haben?
  • Bhatt, ich habe nicht gesagt, der thread war block. @ Roger Lindsjö, fügte ich alle erforderlichen timeout, was ich bin, ist insbesondere das hängen an java.net.SocketInputStream.socketRead0
InformationsquelleAutor John | 2012-09-22
Schreibe einen Kommentar