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 :

[Linux] mémoire consommée fantôme


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut [Linux] mémoire consommée fantôme
    Bonjour,

    Je travaille actuellement sur une application java sous Linux RH4.

    Cette application permet entre autre de lancer des algorithmes en C via JNI.

    Et, évidement, nous avons un problème que l'on ne comprend pas.

    Mise en situation :

    Nous lançons notre application, puis nous exécutons l'algorithme.
    Jusqu'ici tout ce passe bien sans problème, les résultats attendus sont bon.
    Nous relançons le même algorithme, et l'exécution se passe sans problème également.
    Le problème n'intervient que à la 3ème exécution, ou l'application plante.

    Après plus d'un semaine d'investigation, nous supposons que le problème vient de la gestion de la mémoire lorsque l'on utilise JNI, et que à chaque exécution nous recréons des objets sans détruire les précédent utilisés.

    Nous avons donc tenté d'utiliser plusieurs profiler afin de déterminer d'où provenais le problème. Mais malheureusement sans succès.

    Suite à ces observations, plusieurs questions se pose à nous :

    1) Lorsque l'on lance l'application, celle-ci consomme 1.3Go de mémoire virtuelle et 55Mo de mémoire RES (infos extraite de 'top'). D'où sorte ces 1.3 Go de mémoire virtuelle ?

    2) Lorsque l'application plante, nous consommons toute la mémoire virtuelle, soit environ 8Go. Comment se fait il que l'on augmente autant notre consommation de mémoire ?

    3) Et enfin, connaissez vous un outil nous permettant de visualiser le détail de la mémoire utilisée par notre application, sachant que l'on utilise JNI, et que pour l'instant, on n'arrive pas à voir la quantité de mémoire utilisé par nos algo.

    4) Pourquoi ce titre ? bein parce que l'on arrive pas à voir cette mémoire caché et comprendre pourquoi notre appli en consomme autant.

    Je me rend bien compte que ma question peut rester encore très vague, mais je me ferais un plaisir de vous donner toutes les infos qui vous serais nécessaire afin de nous orienter vers une quelconque piste.

    Je vous remercie de votre aide par avance.

  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
    Si vous retirez la couche JNI et qu'à la place vous mettez une petite classe qui donne un résultat bidon -> même phénomène?

    Si pas, il y a fort à parier que ce sont vos lagorithmes qui font des malloc comme des cochons sans jamais les libérer. La mémoire dans la partie native est de la responsabilité du code natif, tout ce qui est coté java est géré par le garbage collector. Pour la partie native vous pouvez utiliser je pense des outils comme valgrind pour repérer les malloc non libérés.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut
    Effectivement, j'ai oublié de mentionné le fait que nous avons écarté le fait que nos algo avait des fuites mémoire à l'aide de purify.

    Nous les avons lancé une dizaine de fois sans jamais obtenir de plantage de leur part.

    Le plantage n'intervient uniquement lors de l'utilisation conjointe avec notre application.

    Nous avons voulu également tenté d'utiliser Valgrind afin de voir quelles infos nous pourrions obtenir, mais malheureusement, nous n'avons pu le lancer.

    En effet, celui-ci nous donne un "segmentation fault", et évidement quitte l'exécution au démarrage de l'application.

    Toutes nos tentatives de lancement via "valgrind" ont lamentablement échoué

    Mais nous aimerions beaucoup pouvoir réussir.

  4. #4
    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
    et avez vous confirmé que le coté algorithme java n'est pas en cause? en gardant en mémoire des object volumineux créés par la couche jni?

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut
    De ce côté là nous n'en somme pas absolument certain. Mais il semble tout de même que les problème java "pur" soient à écarter.

    On suppute fortement que le problème viendrait éventuellement des classes JNI crées qui font le lien entre notre application java et les algo.

    On imagine effectivement que l'on crée des objects sans les détruire ensuite.

    J'ai essayer d'utiliser la fonction DeleteLocalRef et DeleteGlobalRef, sans grand changement, tout du moins visible.

    A moins que je ne les utilise pas correctement....

    Je tient à préciser que ce n'est pas moi qui est écrit les programmes, et je ne fais que les débuggés. Et il est fort possible que mes lacunes en JNI, ne m'aide pas énormément dans ce cas là.

    Y aurais t il des piste à explorer du coté des classes C qu'il y a entre Java et les Algo ?

Discussions similaires

  1. Connaitre le cpu et la mémoire consommée sur une machine linux
    Par supcomingenieur dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 20/06/2013, 10h54
  2. Libérer la mémoire consommée par un DataModule
    Par liviertlse dans le forum Bases de données
    Réponses: 16
    Dernier message: 10/05/2007, 14h59
  3. [mémoire consommée par Oracle]
    Par tesla dans le forum Oracle
    Réponses: 4
    Dernier message: 03/10/2006, 16h47
  4. Réponses: 4
    Dernier message: 09/11/2005, 13h32
  5. Analyseur de mémoire consommé par un soft
    Par chris_wafer_2001 dans le forum C++
    Réponses: 18
    Dernier message: 25/10/2005, 23h30

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