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.
Partager