2016-07-07 7 views
0

In meinem Setup sehe ich zeitweise eine Reihe von Fehlern wie folgt:Löst Tomcat Connection Timeout eine 500 an den HTTP-Client aus?

2016-07-07 12:22:04,248 ERROR [com.biltz.krieg.endpoints.controllers.ControllerBase] (http-nio-8080-exec-25) Caught Exception: 
java.io.EOFException: Unexpected EOF read on the socket 
     at org.apache.coyote.http11.InternalNioInputBuffer.fill(InternalNioInputBuffer.java:152) 
     at org.apache.coyote.http11.InternalNioInputBuffer$SocketInputBuffer.doRead(InternalNioInputBuffer.java:177) 
     at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:110) 
     at org.apache.coyote.http11.AbstractInputBuffer.doRead(AbstractInputBuffer.java:413) 
     at org.apache.coyote.Request.doRead(Request.java:460) 

Die Zeiten dieser Fehler übereinstimmen mit dem Zugriffsprotokoll folgende zeigt:

[07/Jul/2016:12:36:36] 172.31.2.246 POST /v1/blitz 500 59.499 133 
[07/Jul/2016:12:37:29] 172.31.2.246 POST /v1/blitz 500 59.186 133 
[07/Jul/2016:12:39:41] 172.31.2.246 POST /v1/blitz 500 59.889 133 

Das Interessante über die oben es jedem Anfrage, dass eine 500 vom Server ausgelöst hat, dauerte etwa 60 Sekunden verarbeitet werden.

60 Sekunden, wie Tomcat Connection Timeout konfiguriert ist:

<Connector port="8080" protocol="HTTP/1.1" 
       connectionTimeout="60000" 
       redirectPort="8443" /> 

So scheint es wirklich zu dem dieses Timeout verwandt, aber ich verstehe nicht, warum, wie die Dokumentation über die Verbindung Timeout dieses

sagt

Die Anzahl der Millisekunden, die dieser Connector nach dem Akzeptieren einer Verbindung wartet, damit die Anforderungs-URI-Zeile angezeigt wird. Verwenden Sie einen Wert von -1, um keine (d. H. Unendliche) Zeitüberschreitung anzuzeigen. Der Standardwert ist 60000 (d. H. 60 Sekunden), aber beachten Sie, dass die standardmäßige server.xml, die mit Tomcat geliefert wird, diese auf 20000 (d. H. 20 Sekunden) setzt.

Die oben genannten Mittel zu mir, dass nach diesem Timeout auftritt, würde die TCP/HTTP-Verbindung, ohne etwas senden geschlossen werden. Liege ich falsch?

Löst Tomcat Verbindungstimeout eine 500 an den HTTP-Client aus?

Antwort

0

Verwenden Sie Apache als Frontend für Tomcat? Ich hatte ein ähnliches Problem, und das Anpassen des Timeouts in der Apache-Konfiguration löste das Problem.

Insbesondere ich Tomcat 6.0.24 mit eingehenden Anfragen von Port 80 von Apache 2.2.15 auf einer CentOS 6.6 virtuellen Maschine umgeleitet. Ich stellte diese Zeile in meiner Apache-Konfigurationsdatei (/etc/httpd/conf/httpd.conf):

# 
# Timeout: The number of seconds before receives and sends time out. 
# 
Timeout 60 

Der Standardwert ist offenbar 60 Sekunden. Ich habe es auf 120 Sekunden erhöht. Das hat mein Problem gelöst.

Nur um klar zu sein, änderte ich nicht das < Connector> Element in meiner Tomcat-Konfigurationsdatei (/etc/tomcat6/server.xml) wie Sie erwähnt haben. Ich habe es in dem Standard, die offenbar 20 Sekunden für Release-Versionen von Tomcat sind:

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8443" /> 

Dies bedeutet, dass die 500 Fehler, die ich erhielt (und vermutlich auch bei Ihnen als auch) wurden durch dieses Timeout nicht verursacht. Insbesondere, obwohl ich mein Tomcat-Timeout hier auf 20 Sekunden belassen habe, habe ich Services, die mehr als eine Minute dauern und immer noch eine gute Antwort liefern. Es war nur die Apache-Konfiguration, die sie tötete, wenn sie über 60 Sekunden gingen.

+0

Thx. Ich benutze keinen Apache. Dies geschieht auf Amazon hinter einem Amzaon ELB. –