2010-10-26 9 views
0

dans mon démarrage de tomcat, je définis -xms, -xmx à 1GB. à l'intérieur visualvm quand je surveille la mémoirevisualvm surveille l'utilisation de la mémoire

  1. quand je fais l'échantillonnage de la mémoire, il ne montre pas l'utilisation de la mémoire précise, jusqu'à ce que, si je presse « instantané », puis les classes java qui utilisent la mémoire montrant des modèles corrects et les instances comptent . pourquoi comme ça?

  2. également, comme je mets la mémoire tomcat à 1gb, la mémoire continue d'augmenter zip-zat et monte jusqu'à 960mb. jusqu'à ce que je presse "effectuer gc" et la mémoire de retour à 200mb ..

  3. pensez-vous nécessaire de créer un planificateur pour forcer hit hit perform.gc() sur jvm, tous les jours à minuit?

des commentaires de ma description

VisualVM screenshot

Répondre

1

Ce que je crois que vous voyez ici est le Garbage Collector en même temps fait des nettoyages jeune génération, mais le tas est barattage constamment ne peut donc pas obtenir une prise de toutes les références pour une collection d'ancienne génération. Lorsque vous cliquez sur le bouton GC, vous faites une collection "stop-the-world" qui bloque tous les threads, gèle le tas et permet une collection beaucoup plus grande. Mes principales préoccupations ici seraient - une grande collection se produit-elle (après x heures)? Voyez-vous des erreurs OutOfMemory avec un tas plus petit?

1) Avez-vous activé le bouton d'actualisation automatique? Il se peut aussi que le profileur fasse un petit GC (espace Eden) avant de prendre un instantané.

2) Ceci est parfaitement normal. La collecte des ordures prend du temps et des ressources (cycles de processeur). Si vous avez défini votre tas sur une grande taille, il attendra qu'il atteigne un certain pourcentage avant de déclencher un nettoyage de la mémoire lui-même. Je pense que le taux d'espace libre par défaut est compris entre 40% et 70%. Je sais que tomcat a changé la façon dont il traite la version 5, Tomcat v4 a eu des problèmes de performance car il passait beaucoup de temps à utiliser le garbage collector. Vous voudrez peut-être faire des recherches ici et voir si tomcat a des options de récupération de place personnalisées.

3) Non. Un tas presque plein est exactement ce que vous recherchez. Il peut être judicieux de réduire le tas de façon à ce que la récupération de la mémoire ne prenne pas trop de temps. C'est un compromis entre beaucoup de collections de déchets (pauses) et de longues collectes de déchets (longues pauses). Chaque application est différente, donc je commence généralement avec les paramètres par défaut et de modifier au besoin. Il y a beaucoup d'options pour la collecte des ordures (et autres collectionneurs) si vous êtes intéressé.

Java 5

Java 6 FAQ, Whitepaper

+0

@ Steve, votre question: une grande collection jamais se produire (après les heures x)? ans: Non, je le lance sans redémarrer Tomcat pendant 2 semaines. Q: voyez-vous des erreurs hors mémoire avec un plus petit tas? vous voulez que je mette le tas -xmx plus petit pour voir s'il n'y a pas de mémoire? – cometta

+0

@steve 1. ans: je n'utilise pas l'onglet profileur, j'utilise l'onglet 'échantillonnage'. par défaut le bouton d'actualisation est sur – cometta

+0

Je suis plus intéressé par pourquoi vous avez changé la taille de tas en premier lieu ... avez-vous vu des problèmes? –

Questions connexes