Essayez de localiser une fuite! Qu'est-anon signifie pour pmap?
Je suis en train d'essayer de localiser l'endroit où ma mémoire a disparu un processus java s'exécutant sous linux. Quelqu'un m'a suggéré d'utiliser pmap -x pour voir exactement ce que la mémoire est en train de faire.
La sortie est vraiment long, mais, fondamentalement, une bonne partie de c'est une répétition de ce:
00007fbf75f6a000 1016 - - - rwx-- [ anon ]
00007fbf76068000 12 - - - ----- [ anon ]
Qu'est-ce exactement est-ce à dire? Pourquoi dois-je donc le nombre d'entrées de cette (4000+)?
Vous devez vous connecter pour publier un commentaire.
Anon blocs sont "grands" blocs alloué par malloc ou mmap-voir les pages de manuel. En tant que tel, ils n'ont rien à voir avec le Java heap (autre que le fait que l'ensemble du tas doit être stockée dans un bloc).
Dans mon expérience, les piles de threads également utiliser anon blocs. Si vous voyez beaucoup de anon blocs qui ont tous la même taille, et que la taille est de 512 ko à 4 mo (l'exemple ci-dessous est répété plus d'une douzaine de fois pour un Tomcat processus que j'ai en cours d'exécution), qui est la cause probable. Selon le programme, vous pourriez avoir jusqu'à quelques dizaines de ces; si vous voyez des milliers, cela signifie que vous avez un problème avec le filetage.
Mais qui laisse une question: pourquoi êtes-vous à l'aide de pmap pour diagnostiquer une Java problème de mémoire?
Voir
cette partiecette partie de la Performance du Système de Réglage de la mémoire anonyme.Utiliser Eclipse MAT (quand vous obtenez OutOfMemoryExceptions dans le Tas Java pas le tas natif).
J'ai vu ce modèle avant dans un thread de fuite. Si vous avez le code qui est en train d'essayer de pool de threads, mais de toute façon, bousille et les fuites d'un thread, vous obtenez un schéma comme celui dans pmap.
Je pense que chaque bit de la mémoire est le minimum de la taille de la pile du thread, certes, il n'avait rien à voir avec tas dans notre cas.
Nous avons toujours eu OutOfMemoryErrors lorsque nous avons atteint OS limites, même tho lorsque nous analysez le tas, il n'est pas allouées.
Quand nous avons eu un problème comme celui -
pmap [pid] | grep -c 12K
s'est avéré être le nombre de threads en cours d'utilisation.