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

Entrée/Sortie Java Discussion :

Crash jvm / JNI


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Crash jvm / JNI
    Bonjour tout le monde,

    Voilà mon problème : je travaille sur une application de cartographie en temps réelle basée sur WorldWind (et donc JOGL) en ce qui concerne l'affichage. Après quelques heures d'exécution, j'ai un crash de la JVM. Une première analyse de plusieurs fichiers de log hs_err_pidXXX.log montrent que les crashs apparaissent systématiquement sur des appels à méthodes natives (JNI) mais pas tout le temps sur les mêmes fonctions : soit des appels à OpenGL soit des appels à OpenSplice (implémentation du standard DDS) qui permet de distribuer des données à l'ensemble d'un système.
    En fonction de la machine sur laquelle l'application est exécutée, la JVM met plus ou moins de temps à planter :
    1) Sur ma machine, l'application à tourner 8h avant de planter mais il y a peu de données à transiter sur DDS. D'un autre côté, j'ai fait un test où j'ai désactivé la représentation opengl de données mises à jour via OpenSplice et après un nuit d'exécution (~12 h d'exécution) il n'y avait pas de plantage.
    2) Sur une autre machine où tournent plusieurs autres applications qui publient des données sur le bus DDS et un serveur mysql, j'ai pu observé un crash de l'application au bout de 2h.
    3) Sur une plateforme constituée de 2 machines et un server, l'application plante régulièrement toutes les 4h.
    Après avoir relu plusieurs fois le code OpenGL de mon application, je ne vois rien qui puisse entraîner une fuite mémoire (pas d'utilisation de call list donc, peu d'objets affichés dans les scénario de tests, ... bref on est très loin de ce qu'on peut voir dans les jeux vidéos) mais d'après ma rmarque en 1) en désactivant l'affichage des objets je n'ai pas eu de plantage après 12h d'exécution.

    Je n'ai pas encore analysé toutes les données que j'ai (notamment les fichier core) mais étant donné que le plantage n'apparaît pas tout le temps dans les mêmes fonctions natives et que le temps avant le plantage à l'air de dépendre de la charge allouée sur la machine (nombre d'application, quantité de données qui transitent ...), je me dirige vers un problème de mémoire (allocation, fuite, ...) dans les lib JNI. Peut-être que je tire des conclusions trop vite ? Peut-être quelqu'un a déjà été confronté à ce genre de problème ?

    Une dée que j'ai en tête, c'est de supprimer tous les appels à la lib OpenSplice pour les remplacer avec des bouchons (purement Java) mais j'ai des délai très très short donc je me demande si ne serait pas plus rapide d'identifier la cause du problème pour pouvoir la corriger.

    Bref, étant donné que pour l'instant je n'ai aucune piste sérieuse, j'aimerais savoir s'il il existe un moyen de connaître l'état de la mémoire au moment du crash d'une JVM et en particulier la mémoire consommée par chaque lib JNI si c'est possible et donc de me permettre d'identifier un éventuelle fuite mémoire.

    Si quelqu'un a des pistes, des conseils, ... ce sera sympa.
    Merci d'avance.

  2. #2
    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
    si crash de la JVM il y a, il y a effectivement des très très fortes chances que les librairies JNI aient un problème. Même si votre application était trop gourmande au delà des limite, jamais, dans une implémentation correcte coté jni, cela ne doit entrainer un crash de la JVM. La libraire JNI doit remonter correctement une exception, la plus explicite possible.

    Bref, crash jvm = bug = rapport auprès de la librairie en question. Reste à identifier laquelle des deux est coupable. Est-il envisageable de faire tourner un test n'utilisant qu'une des deux librairies?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Yep, j'ai lancé hier un test hier où les appels à la lib OpenSplice sont très limités (seulement quelques un au démarrage de l'application). Du coup j'ai toujours l'affichage de certains objets (pour lesquels le plantage apparaît) qui est mis à jour fréquemment (toutes les secondes ou toutes les 100 ms je ne me rapelle plus) à partir de la données lu sur le premier appel à OpenSplice. L'application tourne depuis 16h donc très probable que le problème viennent de OpenSplice.
    D'après les logs c'est un débordement mémoire donc je pencherais pour une fuite mémoire quelque part dans la lib OpenSplice ou une des surcouches qu'on utilise.
    J'ai discuté avec quelques autres personnes et on m'a proposé d'instrumenter l'appli avec valgrind.

  4. #4
    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
    un bon outil. Il y a aussi electric fence pour les problèmes liées à malloc/free

Discussions similaires

  1. [JOGL] 2.0 rc8 : crash JVM à la fermeture
    Par tails dans le forum OpenGL
    Réponses: 0
    Dernier message: 04/05/2012, 12h55
  2. Crash JVM sur cluster
    Par pverley dans le forum Général Java
    Réponses: 10
    Dernier message: 30/06/2011, 15h36
  3. Récupération des crash JVM
    Par barbiche dans le forum Langage
    Réponses: 4
    Dernier message: 16/03/2009, 22h49
  4. [DEBUTANT] Crash JVM : Unexpected error
    Par foimpou dans le forum Langage
    Réponses: 5
    Dernier message: 03/04/2007, 11h40
  5. Toolkit.getDefaultToolkit() => crash JVM
    Par Tibo dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 19/05/2006, 14h43

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