2010-10-20 4 views
0

Je semble avoir une énorme fuite de mémoire dans une grande application Java. Mais la fuite ne semble pas être dans la mémoire JVM elle-même (ie: tas, eden, survivant, code, perm_gen, etc.) car je ne manque pas de ce type de mémoire (ie: ça monte pendant l'utilisation, mais il redescend finalement quand le GC court).Quelles sont les entrées 'pathname' vides de '/ proc/smap' pour un processus Java?

Mon problème est que je n'ai plus de RAM système! Je suis donc en train de tracer '/ proc/smap' et d'utiliser les outils 'pmap' pour voir ce qui se passe. Par exemple, les entrées 'so', 'tmp' et 'jar' restent relativement stables et n'augmentent pas tellement dans les éléments mappés, ni leur taille mappée augmente de façon inattendue non plus (comme prévu). Mais ce qui augmente considérablement dans le temps, c'est le nombre d'entrées mappées qui ne sont PAS assignées à un chemin d'accès particulier. Au fil du temps, il y en a de plus en plus et ils ne semblent pas disparaître.

Je peux comprendre ce qui se passe par exemple lorsque la JVM mappe un fichier JAR, mais quels sont exactement ces mappings pathless? Quelqu'un at-il une explication/exemple?

De même, quelqu'un peut-il confirmer que l'entrée '[heap]' est le tas de code 'JVM' réel et n'a rien à voir avec l'espace de tas XMM et XMS. J'utilise Java (TM) 2 Runtime Environment, Édition Standard (version 1.5.0_07-b03) sur une distribution Linux 2.6.16.

Répondre

0

Quel serveur d'application utilisez-vous?

Il peut s'agir d'une fuite de mémoire, donc pouvez-vous mettre votre jdk à niveau et essayer?

+0

J'ai essayé 1.6.x et à peu près la même chose. Je suppose que ce sont des fuites liées à des classes réfléchies qui ne sont jamais collectées. – Jeach

Questions connexes