2014-09-22 17 views
5

Mi sono bloccato a java.net.SocketInputStream.socketRead0 (metodo nativo). Si prega di vedere il dump thread come di seguito, è stato in questo stato per 3 ore.È rimasto bloccato su java.net.SocketInputStream.socketRead0 (metodo nativo)

Thread-0" prio=10 tid=0x00007facd02a5000 nid=0x309 runnable [0x00007facd4a43000] 
java.lang.Thread.State: RUNNABLE 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(SocketInputStream.java:150) 
    at java.net.SocketInputStream.read(SocketInputStream.java:121) 
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:442) 
    at sun.security.ssl.InputRecord.read(InputRecord.java:480) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927) 
    - locked <0x00000000e34a0428> (a java.lang.Object) 
    at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:884) 
    at sun.security.ssl.AppInputStream.read(AppInputStream.java:102) 
    - locked <0x00000000e34a0590> (a sun.security.ssl.AppInputStream) 
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235) 
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:275) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:334) 
    - locked <0x00000000e30408b8> (a java.io.BufferedInputStream) 
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:633) 
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:579) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1322) 
    - locked <0x00000000e3031d00> (a sun.net.www.protocol.https.DelegateHttpsURLConnection) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) 
    - locked <0x00000000e3031c80> (a sun.net.www.protocol.https.HttpsURLConnectionImpl) 

E ho impostato il timeout di connessione e il timeout di lettura su URLConnection. Si prega di consultare lo snippet di codice qui sotto. Quindi non so perché si bloccherebbe su java.net.SocketInputStream.socketRead0. Ho solo questo problema ogni tanto. Ogni suggerimento è apprezzato!

public String sendPost(String params) throws Throwable { 
PrintWriter out = null; 
String htmlContent = null; 
try 
{ 
    StringBuffer strBuffer = new StringBuffer(); 
    URL url = new URL(this.webUrl); 
    URLConnection urlConnection = url.openConnection(); 
    urlConnection.setConnectTimeout(3000); 
    urlConnection.setReadTimeout(3000); 

    urlConnection.setRequestProperty("accept", "*/*"); 
    urlConnection.setRequestProperty("connection", "Keep-Alive"); 
    urlConnection.setRequestProperty("user-agent", "***"); 

    urlConnection.setDoOutput(true); 
    urlConnection.setDoInput(true); 

    out = new PrintWriter(urlConnection.getOutputStream()); 
    out.print(params); 
    out.flush(); 

    BufferedReader bufferdReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8")); 
    String readLine = null; 
     try { 
      while ((readLine = bufferdReader.readLine()) != null) { 
       strBuffer.append(readLine); 
      } 
     } catch (Throwable e) { 
      return htmlContent; 
     } 
     htmlContent = strBuffer.toString(); 
     bufferdReader.close(); 
+0

'Connection: keep-alive' è l'impostazione predefinita. Non stai scrivendo alcun parametro POST: è deliberato? – EJP

+0

grazie a @EJP, ho appena incollato più codice nella citazione del codice, è un'operazione di post. per favore rivedi di nuovo .. – BurningDocker

+0

Hai qualche aggiornamento su questo? Ho esattamente lo stesso problema – HamoriZ

risposta

0

Penso che questo sia un bug con URLConnection. Utilizzare Socket e timeout su di essi per verificare.

Problemi correlati