Le délai d'attente Keep Alive n'est pas respecté sur Amazon ELB

9

J'utilise Tomcat 6.0.24 sur Ubuntu (JDK 1.6) avec une application qui effectue des requêtes de style comète sur un connecteur HTTPS (directement contre Tomcat, sans utiliser APR).

Je voudrais définir la durée de conservation à 5 minutes pour ne pas avoir à rafraîchir mes connexions à longue interrogation. Voici ma config:

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

Malheureusement, il semble que le serveur ferme la connexion après 65 secondes. Le pcap d'une session d'exemple ressemble à ceci:

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

(Je suppose que le délai d'expiration de 5 minutes sur le client est dû au fait que la bibliothèque HTTP ne détecte pas la fermeture du socket du côté serveur, mais dans tous les cas - le serveur ne devrait pas fermer la connexion aussi tôt)

(modifier: cela fonctionne comme prévu lors de l'utilisation du connecteur HTTP standard)

sehugg
la source

Réponses:

13

ELB d'Amazon (Elastic Load Balancer) a un délai d'attente de 60 secondes non documenté ( sauf sur les forums ) qui interrompra la connexion si aucune donnée n'a été envoyée. Hacking around en envoyant des espaces toutes les 55 secondes semble que cela fonctionnera jusqu'à ce qu'ils rendent cela configurable.

sehugg
la source
(le timeout est toujours là, BTW .. jeesh)
sehugg
toujours pas configurable ... c'est un problème en suspens depuis 2009 ou alors maintenant ...
Dennis Münkle
4
Configurable jusqu'à 1 heure maintenant docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/…
Peter
10

Le délai d'expiration de l'équilibreur de charge, qui ferme la connexion, est désormais documenté :

Pour configurer le paramètre de délai d'inactivité pour votre équilibreur de charge

  1. Ouvrez la console Amazon EC2 à https://console.aws.amazon.com/ec2/ .
  2. Dans le volet de navigation, sous LOAD BALANCING , cliquez sur Load Balancers .
  3. Sélectionnez votre équilibreur de charge.
  4. Dans le volet inférieur, sélectionnez l' onglet Description .
  5. Recherchez les paramètres de connexion , puis cliquez sur (Modifier) .
  6. Dans la boîte de dialogue Configurer les paramètres de connexion, entrez une valeur pour Délai d'inactivité . La plage du délai d'inactivité est de 1 à 3 600 secondes.
  7. Cliquez sur Enregistrer .
Zoltán
la source
Cela devrait maintenant être la réponse acceptée.
jonatan