95 votes

Messages du journal de récupération de place Java

J'ai configuré le java pour le vidage des poubelles de collecte de l'information dans les journaux (verbose GC). Je ne suis pas sûr de ce que la collecte des ordures entrées dans les journaux veux dire. Un échantillon de ces entrées sont affichées ci-dessous. J'ai cherché sur Google et n'ai pas trouvé de solides explications.

J'ai quelques raisonnable devine, mais je suis à la recherche de réponses qui fournissent des définitions strictes de ce que les chiffres dans les entrées de moyenne, étayé par des sources crédibles. Automatique +1 pour toutes les réponses qui cite soleil de la documentation. Mes questions sont les suivantes:

  1. Ce n'PSYoungGen? Je suppose qu'il a quelque chose à voir avec la précédente (jeunes?) génération, mais quoi exactement?
  2. Quelle est la différence entre le deuxième triplet de nombres et de la première?
  3. Pourquoi un nom(PSYoungGen) spécifié pour le premier triplet de nombres, mais pas le second?
  4. Qu'est-ce que chaque nombre (taille de la mémoire) dans le triplet veux dire. Par exemple, dans 109884K->14201K(139904K), est la mémoire avant de GC 109884k et puis il est réduit à 14201K. Comment est le troisième nombre est-il pertinent? Pourquoi aurions-nous besoin d'une deuxième série de chiffres?

8109.128: [GC [PSYoungGen: 109884K->14201K(139904K)] 691015K->595332K(1119040K), 0.0454530 sec]

8112.111: [GC [PSYoungGen: 126649K->15528K(142336K)] 707780K->605892K(1121472K), 0.0934560 sec]

8112.802: [GC [PSYoungGen: 130344K->3732K(118592K)] 720708K->607895K(1097728K), 0.0682690 sec]

127voto

michaeljoseph Points 1494
  1. PSYoungGen se réfère à la collecte des déchets de les utiliser pour la collecte mineure. PS représente Parallèle Piéger.
  2. La première série de nombres sont les avant/après de tailles de la jeune génération et de la deuxième série sont pour l'ensemble du segment. (Le diagnostic d'une Collecte des Ordures problème précise le format)
  3. Le nom l'indique, la génération et le collectionneur en question, la deuxième série sont pour l'ensemble du segment.

Un exemple d'un full GC montre également les collecteurs utilisés pour l'ancien et permanent des générations:

3.757: [Full GC [PSYoungGen: 2672K->0K(35584K)] 
            [ParOldGen: 3225K->5735K(43712K)] 5898K->5735K(79296K) 
            [PSPermGen: 13533K->13516K(27584K)], 0.0860402 secs]

Enfin, brisant une ligne vers le bas de votre exemple de sortie du journal:

8109.128: [GC [PSYoungGen: 109884K->14201K(139904K)] 691015K->595332K(1119040K), 0.0454530 secs]
  • 107Mb utilisé avant de GC, 14Mb utilisé après la GC, max jeune génération taille 137Mb
  • 675Mb tas utilisé avant de GC, 581Mb tas utilisées après la GC, 1 go max taille de segment de mémoire
  • minor GC s'est produite 8109.128 secondes depuis le début de la JVM et a pris 0.04 secondes

90voto

Michael Myers Points 82361

La plupart de cela est expliqué dans la GC Guide de Réglage (qui vous feriez bien de lire de toute façon).

L'option de ligne de commande -verbose:gc des causes d'informations sur le tas et la collecte des ordures à être imprimé à chaque collection. Par exemple, voici la sortie d'un gros serveur d'application:

[GC 325407K->83000K(776768K), 0.2300771 secs]
[GC 325816K->83372K(776768K), 0.2454258 secs]
[Full GC 267628K->83769K(776768K), 1.8479984 secs]

Ici, nous voyons deux petites collections suivie par une importante collection. Les chiffres avant et après la flèche (par exemple, 325407K->83000K à partir de la première ligne) indiquer la taille combinée de vivre des objets avant et après la collecte des ordures, respectivement. Après un petit collections de la taille comprend certains objets qui sont des ordures (qui n'est plus en vie), mais qui ne peut pas être récupéré. Ces objets sont contenues soit dans le pensionnaire de génération, ou la référence de la poste permanent ou permanent générations.

Le nombre entre parenthèses (par exemple, (776768K) de nouveau à partir de la première ligne) est le commis de la taille du segment de mémoire: la quantité d'espace utilisable pour les objets java sans demander plus de mémoire à partir du système d'exploitation. Notez que ce nombre ne comprend pas celui de la victime d'espaces, car un seul peut être utilisé à tout moment, et n'inclut pas non plus la génération permanente, qui contient les métadonnées utilisées par la machine virtuelle.

Le dernier point de la ligne (par exemple, 0.2300771 secs) indique le temps nécessaire pour réaliser la collecte; dans ce cas, environ un quart de seconde.

Le format de la collection majeure dans la troisième ligne est similaire.

Le format de la sortie produite par -verbose:gc est sujet à changer dans les futures versions.

Je ne suis pas certain pourquoi il y a une PSYoungGen dans le vôtre; vous avez changé le garbage collector?

23voto

Andrei Points 573

Je voulais juste mentionner que l'on peut voir la GC journal avec le

-XX:+PrintGCDetails

le paramètre. Ensuite, vous verrez la PSYoungGen ou PSPermGen de sortie comme dans la réponse.

Aussi -Xloggc:gc.journal semble générer la même sortie comme -verbose:gc, mais vous pouvez spécifier un fichier de sortie dans la première.

Exemple d'utilisation: java -Xloggc:./de la mémoire.journal -XX:+PrintGCDetails Mémoire

Pour visualiser les données mieux, vous pouvez essayer gcviewer: http://www.tagtraum.com/gcviewer.html

Prenez soin de le rédiger correctement les paramètres, j'ai oublié le "+" et mon JBoss serait pas démarrer, sans aucun message d'erreur!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X