2013-06-13 8 views
29

Ho un'applicazione web basata su tomcat. Sto intermittenza ottenendo il seguente eccezione,java.net.SocketTimeoutException: lettura scaduta con tomcat

Caused by: java.net.SocketTimeoutException: Read timed out 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(SocketInputStream.java:150) 
    at java.net.SocketInputStream.read(SocketInputStream.java:121) 
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:532) 
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:501) 
    at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:563) 
    at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:124) 
    at org.apache.coyote.http11.AbstractInputBuffer.doRead(AbstractInputBuffer.java:346) 
    at org.apache.coyote.Request.doRead(Request.java:422) 
    at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:290) 
    at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:431) 
    at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:315) 
    at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:200) 
    at java.nio.channels.Channels$ReadableByteChannelImpl.read(Channels.java:385) 

Purtroppo non ho accesso al client, in modo che io sto solo cercando di confermare su varie ragioni questo può accadere,

  1. server tenta leggere i dati dalla richiesta, ma richiede più tempo del valore di timeout per i dati che arrivano dal client. Il timeout in questo caso è normalmente il connettore tomcat -> connectionTimeout.

  2. Il client dispone di un set di timeout di lettura e il server impiega più tempo di quello per rispondere.

  3. Uno dei thread che ho passato, ha detto che questo può accadere con alta concorrenza e se il keepalive è abilitato.

per # 1, il valore iniziale avevo set è stato di 20 secondi, ho urtato questo fino a 60sec, metterà alla prova e vedere se ci sono eventuali modifiche.

Nel frattempo, se qualcuno di voi può fornirvi un parere esperto su questo, sarà davvero d'aiuto. O per qualsiasi altra ragione puoi pensare a quale potrebbe causare questo problema.

Grazie in anticipo.

Vicky

+0

Non credo sia il punto 2; tuttavia, per confermare si dovrebbe anche impostare un 'AccessLogValve' e provare e correlare questa eccezione con una richiesta specifica. – fge

+0

Ciao Vicky, sei riuscito a risolvere questo problema? Sto affrontando lo stesso problema. – Elina

risposta

29

Server sta cercando di leggere i dati dalla richiesta, ma la sua prendendo più lungo del valore di timeout per i dati dal cliente. Il timeout in questo caso è normalmente il connettore tomcat -> connectionTimeout.

Corretto.

Cliente ha un timeout impostato in lettura, e il server sta prendendo più lungo di quello di rispondere.

No. Ciò causerebbe un timeout sul client.

Uno dei thread che ho passato, ha detto che questo può accadere con alta concorrenza e se il keepalive è abilitato.

Ovviamente è un'ipotesi e completamente errata. Succede se e solo se nessun dato arriva entro il timeout. Periodo. Il carico, il keepalive e la concorrenza non hanno nulla a che fare con questo.

Significa solo che il client non sta inviando. Non devi preoccuparti di questo. I client del browser vanno e vengono in tutti i modi strani.

+0

Grazie per gli input. – Vicky

+0

Per il n. 1, come ho detto, ho rilevato il valore di timeout della connessione del connettore tomcat da 20 sec a 60 sec. Se i timeout si riducono, proverò a cambiarlo in -1 (infinito) per il test e infine a impostare un valore più appropriato. Per il n. 2, se supponiamo che il client ritardi quale errore/eccezione dovrei aspettarmi sul server? – Vicky

+0

Se il client va in timeout leggendo la risposta, il server non vedrà nulla o potrebbe vedere un 'reset della connessione'. Non metterei il timeout di lettura del server troppo alto: lega un thread. Se un client apre una connessione al server e non invia nulla immediatamente, si comporta in modo anomalo. – EJP

-3

Sto usando 11.2 e ho ricevuto i timeout.

Ho risolto utilizzando la versione jsoup di seguito.

<dependency> 
     <groupId>org.jsoup</groupId> 
     <artifactId>jsoup</artifactId> 
     <version>1.7.2</version> 
     <scope>compile</scope> 
    </dependency>