IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

probleme timeout rmi trop long


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Par défaut probleme timeout rmi trop long
    Bonjour,

    J'ai un probleme depuis un bon moment de temps.
    J'ai une application java avec deux objets qui communiquent en rmi. L'objet A se trouve dans une jvm sur une machine unix (fedora) et l'objet b sur une machine windowsXP. Le cas d'utilisation c'est le suivant:
    A appelle une methode m sur B : ok.
    A attend quelques secondes. En se temps je tue la jvm de B.
    A appelle de nouveau la methode m sur B.

    Le dernier appel dure (et bloque) 3 minute avant de jeter une exeption ( Connection timed out).

    Est-ce qu'il y a une possibiliter de reduire ce timeout de r minutes ?

    Le meme test entre unix et unix a un timeout de 3 mls.

    J'ai rajoute la stacktrace du thread qui bloque (cote unix, le dernier appel de A)

    Merci,
    Emil.



    StackTrace(thread dump):

    PlainSocketImpl.socketConnect(InetAddress, int, int) line: not available [native method]
    SocksSocketImpl(PlainSocketImpl).doConnect(InetAddress, int, int) line: 333
    SocksSocketImpl(PlainSocketImpl).connectToAddress(InetAddress, int, int) line: 195
    SocksSocketImpl(PlainSocketImpl).connect(SocketAddress, int) line: 182
    SocksSocketImpl.connect(SocketAddress, int) line: 366
    Socket.connect(SocketAddress, int) line: 519
    Socket.connect(SocketAddress) line: 469
    Socket.<init>(SocketAddress, SocketAddress, boolean) line: 366
    Socket.<init>(String, int) line: 180
    RMIDirectSocketFactory.createSocket(String, int) line: 22
    RMIMasterSocketFactory.createSocket(String, int) line: 128
    TCPEndpoint.newSocket() line: 595
    TCPChannel.createConnection() line: 198
    TCPChannel.newConnection() line: 184
    UnicastRef.invoke(Remote, Method, Object[], long) line: 110

    Configuration: Machine 1: Linux Fedora
    Machine 2: Windows XP

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    C'est probablement qu'au moment ou tu tue la machine sous XP, l'OS n'envoie pas de paquet RST sur les connections ouvertes. Donc t'es obligé d'attendre le timeout, alors que quand l'os envoie le rst suite au kill, le client est informé immédiatement de l'abandon de la connection. Une solution serait de mettre, sur ton appli serveur, un shutdown hook qui, à la fermeture, ferme toutes tes sockets, que tu as bien sagement rangé dans une variable accessible

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Par défaut
    Merci tchize pour ta reponse.
    Le probleme est un peu plus complexe que ca. Je l'ai simplifie pour le poster sur le forum.
    On travaille sur une platforme java de programation distribuee (ProActive).
    Le probleme de timeout de windows nous pose des problemes au niveau fault tolerance. si une resource windows est tombee, mon Resource Manager va attandre les 3 minutes avant de l'enlever de la liste des ressource disponibles.
    C'est pour ca que j'ai besoin de reduire le timeout sans supposer que l'appli qui tombe en panne va anticiper sa mort et fermera sagement tous les sockets

    Merci,
    Emil.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Par défaut
    Voila, tu avais raison:
    C'est seulement quand le firewall default de win est active que win ne renvoie plus rien apres que l'appli soit tuee.
    Par contre, si le firewall est desactivee, des packets FIN at ACK sont envoye et alors le client unix sais que la connexion est morte.

    Je ne suis pas arrive par contre a configurer le firewall pour resoudre le probleme. Une idee?

    Merci, Emil.

    PS. Si qqun a le meme probleeme, une discussion sur le forum de sun sur le meme probleme:
    http://forum.java.sun.com/thread.jsp...ageID=10279854

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je suis pas sur que le fw est configurable, ca fait probablement partie de ses règle de filtrage, çà permet d'empecher probablement les port scans.

Discussions similaires

  1. [SQL-Server] Probleme script: nom de base trop long
    Par AlternantOracle dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 27/05/2010, 16h45
  2. Script, telnet et timeout trop long
    Par Chris1845 dans le forum Linux
    Réponses: 5
    Dernier message: 02/07/2009, 12h58
  3. [Système] Traitement trop long, géré le timeout
    Par Oberown dans le forum Langage
    Réponses: 2
    Dernier message: 01/08/2006, 08h44
  4. Probleme UPDATE resultat trop long
    Par Tonio_1394 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/10/2004, 11h50
  5. Arrêter un prog si temps de connexion trop long
    Par jakouz dans le forum Langage
    Réponses: 4
    Dernier message: 22/10/2002, 18h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo