java.net.SocketTimeoutException: Read timed out sous tomcat

j'ai une application web basée sur tomcat. J'obtiens par intermittence l'exception suivante,

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)

malheureusement je n'ai pas accès au client, donc j'essaye juste de confirmer sur diverses raisons que cela peut arriver,

  1. le serveur essaie de lire les données de la requête, mais cela prend plus de temps que la valeur de timeout pour que les données arrivent du client. Le délai ici serait typiquement tomcat connector - > connectionTimeout attribut.

  2. Le Client a un délai de lecture défini, et le serveur prend plus de temps que cela pour répondre.

  3. L'un des fils que j'ai traversé, dit que cela peut se produire avec une haute simultanéité et si le keepalive est activé.

pour #1, la valeur initiale que j'avais définie était de 20 sec, j'ai passé à 60 sec, je vais tester et voir s'il y a des changements.

En attendant, si l'un de vous peut vous fournir expert une opinion à ce sujet serait très utile. Ou pour n'importe quelle autre raison qui pourrait causer ce problème.

Merci d'avance.

Vicky

36
demandé sur Vicky 2013-06-13 08:30:40

3 réponses

le serveur essaie de lire les données de la requête, mais cela prend plus de temps que la valeur de timeout pour que les données arrivent du client. Le délai ici serait typiquement l'attribut tomcat connector -> connectionTimeout.

Corriger.

Le Client a un délai de lecture défini, et le serveur prend plus de temps que cela pour répondre.

Non. Que serait la cause d'un timeout chez le client.

L'un des fils que j'ai traversé, dit que cela peut se produire avec une haute simultanéité et si le keepalive est activé.

c'est évidemment une conjecture, et complètement incorrect. Il se produit si et seulement si aucune donnée n'arrive dans le délai. Période. Load, keepalive et la concurrence n'ont rien à voir avec ça.

cela signifie simplement que le client n'envoie pas. Vous n'avez pas besoin de s'inquiéter à ce sujet. Navigateur clients vont et viennent dans toutes sortes d'étranges façon.

31
répondu user207421 2013-06-13 07:04:21

Pour ceux qui viennent à travers ce et de vouloir "couper à la chasse" solution rapide, c'est ici:-

  1. localisez le serveur.fichier xml dans le dossier" conf " sous le répertoire de base de Tomcat (i.e. %CATALINA_HOME%/conf/server.xml).
  2. ouvrir le fichier dans un éditeur et rechercher <Connector.
  3. localisez le connecteur approprié qui est le timing out - ce sera typiquement le connecteur HTTP, c.-à-d. celui avec protocol="HTTP/1.1".
  4. Si connectionTimeout valeur est définie sur l' connecteur, il peut être nécessaire de l'augmenter - par exemple de 20000 millisecondes (= 20 secondes) à 120000 millisecondes (= 2 minutes). Si aucun connectionTimeout valeur de la propriété est définie sur le connecteur, la valeur par défaut est de 60 secondes - si cela est insuffisant, la propriété peut être nécessaire d'ajouter.
  5. Redémarrez Tomcat
0
répondu Steve Chambers 2018-09-19 13:20:16

j'utilise 11.2 et j'ai reçu des temps morts.

j'ai résolu en utilisant la version de jsoup ci-dessous.

    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.7.2</version>
        <scope>compile</scope>
    </dependency>
-5
répondu Shahid Hussain Abbasi 2018-02-07 19:50:45