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

Java Discussion :

Thread et application qui plante


Sujet :

Java

  1. #1
    Membre actif Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 263
    Points
    263
    Par défaut Thread et application qui plante
    Bonjour,

    Je travaille sur un projet où il y a exportation de fichiers d'un format dans un autre.

    Les méthodes d'exportation ne me sont pas accessibles, et il arrive que selon les fichiers à exporter, l'application "plante" à cause de ces méthodes : l'exportation prend un temps infini et ne renvoie rien.

    Je voudrait savoir s'il existe un façon de faire qui puisse prévenir l'utilisateur du bug, voire, mieux, de lui permettre de stopper la méthode qui plante.

    J'ai pensé à mettre les méthodes à risque dans des Thread à part, et dans le Thread principal, écrire une méthode permettant de stopper le Thread à part.

    Seulement, la plupart des méthodes permettant de mettre en pause ou de stopper les Thread partent du principe que le Thread vérifie périodiquement une variable (que le Thread principal transforme lors de l'arret). Si ma méthode plante, tout se passe comme si le Thread à stopper entrait dans une boucle infinie, (genre while(true) {}) et ne pourrait plus vérifier l'état de cette variable.

    Quelqu'un aurait-il une idée pour résoudre mon problème?

    Je vous remercie vivement de vos aides et conseils ;-)

    EDIT: J'ai pensé à un Timer qui vérifie périodiquement si le Thread à part et toujours alive, et si au bout d'un long moment, c'est toujours le cas, afficher un message pour avertir l'utilisateur. Mais je ne vois toujours pas comment stopper le Thread à part et commencer une nouvelle tâche...
    ZORRO
    Plus Vengeur que Masqué

  2. #2
    Membre actif Avatar de aperrin
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 221
    Points : 272
    Points
    272
    En essayant continuellement, on finit par réussir. Donc plus ça rate, plus on a de chances que ça marche !

  3. #3
    ndp
    ndp est déconnecté
    Membre actif Avatar de ndp
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 227
    Points : 255
    Points
    255
    Par défaut
    salut,

    est-ce que tu peux chercher l'origine du bug?
    exp: tue le process java, recupere le thread dump.

  4. #4
    Membre actif Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 263
    Points
    263
    Par défaut
    Salut,

    Je comprends pas ce que tu veux dire par "tue le process java" "récupère le Thread dump", je suis relativement novice en programmation :-S

    Pourrais-tu être plus explicite?

    Merci :-)
    ZORRO
    Plus Vengeur que Masqué

  5. #5
    ndp
    ndp est déconnecté
    Membre actif Avatar de ndp
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 227
    Points : 255
    Points
    255
    Par défaut
    l'idee est la suivante: ton programme bloque et il faut determiner ou est-ce qu'il bloque.

    il bloque parce qu'un thread bloque (peut etre en attente d'un lock,d'une operation d'I/O...)
    Pour savoir ca, tu peux examiner l'etat de l'ensemble des threads a un moment donne (stack trace,etat vis a vis des verrous) ---> c'est ca le thread dump

    Une facon de recuperer le thread dump, c'est d'envoyer un signal au processus java qui tourne, pour l'arreter. Et avant de s'arreter, il y a des chances qu'il produise un thread dump (ie: l'etat de tous les threads au moment ou il s'est arrete). En gros, tu tues le processus java que tu as demarrer pour lancer ton appli

  6. #6
    Membre actif Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 263
    Points
    263
    Par défaut
    D'accord.

    Mais le problème est que je ne peux pas toucher aux méthodes d'exportation, sinon, j'aurais pu me débrouiller de mettre une condition quelque part.

    Il faut donc que je fasse avec le fait que le Thread qui gouverne l'action d'exportation peut planter.

    Ce que je pense faire au final, c'est de mettre la méthode à risque dans un Thread que je déclare Daemon (il s'arrêtera lorsqu'il aura exporter mes fichiers ou bien s'il plante à la fermeture de l'application) et si le Thread reste en vie trop longtemps (temps mesuré avec un Timer), alors il en lance un autre qui prend le relai.

    Voilà!!!

    Il me reste plus qu'à programmer tout ça :-S

    Merci en tout cas à tous les deux pour vos conseils :-)
    ZORRO
    Plus Vengeur que Masqué

  7. #7
    ndp
    ndp est déconnecté
    Membre actif Avatar de ndp
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 227
    Points : 255
    Points
    255
    Par défaut
    moi le conseil que je te donne, c'est de d'abord determiner la raison du blocage, avant toute chose.

    Surtout avant de te lancer dans des threads daemons et cie

  8. #8
    Membre actif Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 263
    Points
    263
    Par défaut
    C'est vrai que ce serait plus prudent.

    Je pense que le problème vient que pour certains fichiers xml ne comportent pas les balises que cherche à lire les documents xsl associés. Je ne peux pas en être totalement sûr, car les méthodes en question ne me sont pas accessible.

    Bon, je vais quand même me lancer, de toute façon, c'est ça ou rester avec una application qui risque de planter...

    Merci pour tes conseils :-)
    ZORRO
    Plus Vengeur que Masqué

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    quelques indices:

    d'abord, comme mentionné, obtenir un Thread dump. Le plus facile, t'attends que çà "bloque", et, si t'es sour linux/unix, tu tappe dans une autre console "kill -3 <numero du pid java>", pour récupérer le numéro de pid, un"ps" est utile. Si t'es sous windows, si ma mémoire et bonne, tu fait CTRL-Z dans la console à t'as démarré java. C'est un processus de la jvm qui va t'afficher tous les threads de ton application et à quel endroit ils sont.

    Deuxième chose: tu mentionne de la gestion de xml, les processus xml, si il font de la validation et si ils référencent un xsd, vont tenter de la télécharger sur internet si ils ne l'ont pas en local. Si ton process est derrière un firewall, il attends peut etre 3 plombes que le serveur daigne lui répondre. Le thread dump aidera à identifer ce genre de problème.

    Si tu n'arrive pas à lire le thread-dump, n'hésite pas à paster ici le Thread qui te concerne, on t'aidera à le lire


    Edit: un sniff des tentative du réseau, avec des outils comme wireshark, peut pafrois aussi s'avérer intéressant.

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    j'ai fait aussi un kill -3 sur un process java (jvm d'un serveur d'applis) mais je n'arrive pas à retrouver les infos liées à ce thread dump
    Sortie stdout standard ? fichier de log de mon serveur d'appli ? fichier à part ?
    autre fichier.
    Où puis-je récupérer ces infos ?
    Merci

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    sur stdout ou stderr, je suis pas sur. Si t'es sous tomcat çà finira donc dans logs/catalina.out

Discussions similaires

  1. Application qui plante au lancement (ok sur l'émulateur)
    Par benthebest dans le forum Android
    Réponses: 10
    Dernier message: 03/12/2011, 23h13
  2. Application qui plante (quitter, click sur listeView)
    Par jonathantarabbia dans le forum Android
    Réponses: 20
    Dernier message: 17/01/2011, 13h36
  3. [WD15] Application qui plante uniquement sur un poste
    Par mik3.42 dans le forum WinDev
    Réponses: 3
    Dernier message: 09/04/2010, 09h38
  4. Application qui plante à cause des tabs ?
    Par astrolus dans le forum Windows Forms
    Réponses: 1
    Dernier message: 02/05/2008, 22h54
  5. Application qui plante quand lancé par sans débugage
    Par bossun dans le forum Général Dotnet
    Réponses: 9
    Dernier message: 12/07/2007, 12h08

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