web-dev-qa-db-fra.com

Qu'est-ce que le seuil de métadonnées GC et comment le régler?

Dans une application, j'ai les éléments suivants -verbose:gc

[GC (Metadata GC Threshold)  8530310K->2065630K(31574016K), 0.3831399 secs]
[Full GC (Metadata GC Threshold)  2065630K->2053217K(31574016K), 3.5927870 secs]
[GC (Metadata GC Threshold)  8061486K->2076192K(31574016K), 0.0096316 secs]
[Full GC (Metadata GC Threshold)  2076192K->2055722K(31574016K), 0.9376524 secs]
[GC (Metadata GC Threshold)  8765230K->2100440K(31574016K), 0.0150190 secs]
[Full GC (Metadata GC Threshold)  2100440K->2077052K(31574016K), 4.1662779 secs]

Qu'est-ce que c'est "Seuil de métadonnées GC" et comment le réduire. Remarque: bien que le GC complet passe beaucoup de temps à nettoyer, il nettoie en fait beaucoup, c'est-à-dire qu'il serait préférable qu'il ne le fasse pas.

33
Peter Lawrey

Le message de journal indique que GC a été provoqué par échec d'allocation de Metaspace . Les métaspaces contiennent les métadonnées de classe. Ils sont apparus dans Java 8 pour remplacer PermGen .

Voici quelques options à régler Metaspaces .
Vous pouvez définir une ou plusieurs des options suivantes:

-XX:MetaspaceSize=100M Définit la taille de l'espace de métadonnées de classe alloué qui déclenchera un garbage collection la première fois qu'il sera dépassé;

-XX:InitialBootClassLoaderMetaspaceSize=32M pour augmenter le chargeur de classe de démarrage Metaspace;

-XX:MinMetaspaceFreeRatio=50 pour faire croître les Metaspaces de manière plus agressive;

-XX:MaxMetaspaceFreeRatio=80 pour réduire le risque de rétrécissement des métaspaces;

-XX:MinMetaspaceExpansion=4M la taille minimale par laquelle un Metaspace est étendu;

-XX:MaxMetaspaceExpansion=16M la taille maximale pour étendre un Metaspace sans GC complet.

43
apangin

Bien qu'il existe déjà une réponse acceptée, je voulais mentionner qu'il y a aussi:

-XX:MaxMetaspaceSize=<NNN> where <NNN> est la quantité maximale d'espace à allouer aux métadonnées de classe (en octets).

Aussi de ici ,

La récupération de place des classes mortes et des chargeurs de classe est déclenchée une fois que l'utilisation des métadonnées de classe atteint le "MaxMetaspaceSize".

Il y a une liste des options disponibles dans cet article .

13
Ravindra HV