(Linux) Fuite Memoire

Fuite Memoire (Linux) - Java - Programmation

Marsh Posté le 05-09-2009 à 14:18:30    

Bonjour  :hello:  
 
 
J'ai développé une application en java multithreadé (~10 threads), elle tourne sous Linux Debian Stable.
Il y a quelques semaine l'application s'est faite "tuer" par le noyau pour libérer de la mémoire sur le serveur.(message syslog)
En effet l'appli avait utilisé toute la ram et tout le swap dispo...
 
Ce que je ne comprends pas c'est qu'un des Thread utilise les fonctions Runtime.getRuntime().totalMemory(); et Runtime.getRuntime().freeMemory(), et log les valeurs obtenues toutes les 5-10sec, ca ne depasse jamais 25Mo, or quand je fais un top mon application au lancement fait 80Mo(je comprends c'est la JVM) et au bout de quelques jours elle fait 300Mo (la je vois pas)
 
J'ai fais des graphs de ces valeurs de la mémoire "RES" du top et ca donne un truc du genre stable (au tour de 80MO) pendant les premieres heures et aprés ca ne cesse d'augmenter de facon constante.(Ce n'est pas un pick d'un seul coup).
 
 
Vu que les infos Runtime n'expliquent pas cette augmentation, auriez vous une idée d'ou ca pourrait venir ?
 
Auriez vous des outils permettant de trouver d'où vient cette fuite mémoire?
 
 
Questions bonus:
1°)Est ce qu'une fuite dans un jar, apparaitrait dans Runtime.getRuntime().freeMemory() ?
2°)Est ce que des appels excessifs a Class.forName() (sur un meme nom de class) ont un impacte sur la jvm ?
3°)Est ce qu'une utilisation abusive de "synchronized" pourrait être responsable ?

Message cité 1 fois
Message édité par Elmoricq le 18-09-2009 à 13:45:41
Reply

Marsh Posté le 05-09-2009 à 14:18:30   

Reply

Marsh Posté le 07-09-2009 à 16:11:53    

Un outil qui peut te permettre de localiser ton problème : jconsole, normalement livré avec ta jvm

Reply

Marsh Posté le 18-09-2009 à 13:42:16    

Cela peut venir des ressources internes, comme les pointeurs de fichier ouvert.  
Pour les problemes de mémoire classique, j'ai publié un article sur mon blog : http://tcourant.wordpress.com/2009 [...] tion-java/
 

ffluff a écrit :

Bonjour  :hello:  
 
 
J'ai développé une application en java multithreadé (~10 threads), elle tourne sous Linux Debian Stable.
Il y a quelques semaine l'application s'est faite "tuer" par le noyau pour libérer de la mémoire sur le serveur.(message syslog)
En effet l'appli avait utilisé toute la ram et tout le swap dispo...
 
Ce que je ne comprends pas c'est qu'un des Thread utilise les fonctions Runtime.getRuntime().totalMemory(); et Runtime.getRuntime().freeMemory(), et log les valeurs obtenues toutes les 5-10sec, ca ne depasse jamais 25Mo, or quand je fais un top mon application au lancement fait 80Mo(je comprends c'est la JVM) et au bout de quelques jours elle fait 300Mo (la je vois pas)
 
J'ai fais des graphs de ces valeurs de la mémoire "RES" du top et ca donne un truc du genre stable (au tour de 80MO) pendant les premieres heures et aprés ca ne cesse d'augmenter de facon constante.(Ce n'est pas un pick d'un seul coup).
 
 
Vu que les infos Runtime n'expliquent pas cette augmentation, auriez vous une idée d'ou ca pourrait venir ?
 
Auriez vous des outils permettant de trouver d'où vient cette fuite mémoire?
 
 
Questions bonus:
1°)Est ce qu'une fuite dans un jar, apparaitrait dans Runtime.getRuntime().freeMemory() ?
2°)Est ce que des appels excessifs a Class.forName() (sur un meme nom de class) ont un impacte sur la jvm ?
3°)Est ce qu'une utilisation abusive de "synchronized" pourrait être responsable ?


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed