Halten Sie das Timeout am Leben, das bei Amazon ELB nicht eingehalten wird

9

Ich verwende Tomcat 6.0.24 unter Ubuntu (JDK 1.6) mit einer App, die Anforderungen im Comet-Stil auf einem HTTPS-Connector ausführt (direkt gegen Tomcat, ohne APR).

Ich möchte die Keep-Alive-Funktion auf 5 Minuten einstellen, damit ich meine Verbindungen mit langen Abfragen nicht aktualisieren muss. Hier ist meine Konfiguration:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="1000"  keepAliveTimeout="330000"
        scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" />

Leider scheint der Server die Verbindung nach 65 Sekunden zu schließen. Das pcap einer Beispielsitzung sieht ungefähr so ​​aus:

T=0   Client sends SYN to server, handshake etc.
T=65  Server sends FIN to client
T=307 Client sends FIN to server

(Ich vermute, das 5-minütige Timeout auf dem Client ist darauf zurückzuführen, dass die HTTP-Bibliothek den Socket auf der Serverseite nicht erkennt, aber auf jeden Fall sollte der Server die Verbindung nicht so früh schließen.)

(Bearbeiten: Dies funktioniert wie erwartet, wenn der Standard-HTTP-Connector verwendet wird.)

sehugg
quelle

Antworten:

13

Die ELB (Elastic Load Balancer) von Amazon verfügt über ein undokumentiertes 60-Sekunden-Timeout ( außer in Foren ), das die Verbindung abbricht, wenn keine Daten gesendet wurden. Das Herumhacken durch Senden von Leerzeichen alle 55 Sekunden scheint zu funktionieren, bis sie dies konfigurierbar machen.

sehugg
quelle
(das Timeout ist immer noch da, BTW .. jeesh)
sehugg
immer noch nicht konfigurierbar ... dies ist ein ausstehendes Problem seit 2009 oder so ...
Dennis Knochenwefel
4
Konfigurierbar bis 1 Stunde jetzt docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/…
Peter
10

Das Load Balancer-Timeout, mit dem die Verbindung geschlossen wird, ist jetzt dokumentiert :

So konfigurieren Sie die Einstellung für das Leerlaufzeitlimit für Ihren Load Balancer

  1. Öffnen Sie die Amazon EC2-Konsole unter https://console.aws.amazon.com/ec2/ .
  2. Klicken Sie im Navigationsbereich unter LOAD BALANCING auf Load Balancers .
  3. Wählen Sie Ihren Load Balancer.
  4. Wählen Sie im unteren Bereich die Registerkarte Beschreibung .
  5. Suchen Sie die Verbindungseinstellungen und klicken Sie dann auf (Bearbeiten) .
  6. Im Configure Connection Settings Dialogfeld einen Wert eingeben für Idle Timeout . Der Bereich für das Leerlaufzeitlimit liegt zwischen 1 und 3.600 Sekunden.
  7. Klicken Sie auf Speichern .
Zoltán
quelle
Dies sollte nun die akzeptierte Antwort sein.
Jonatan