Qu'est-ce que le seuil GC des métadonnées et comment dois-je l'ajuster?

dans une application j'ai ce qui suit -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 "Métadonnées GC seuil" et comment faire pour la réduire. Remarque: bien que le GC complet passe beaucoup de temps à nettoyer, il nettoie beaucoup, c'est-à-dire qu'il serait préférable qu'il ne le fasse pas.

30
demandé sur Nathan S. 2014-08-11 23:59:51

2 réponses

le message du journal indique que le GC est causé par Metaspace échec de la répartition. Metaspaces en attente de la classe de métadonnées. Ils sont apparus en Java 8 pour remplacer PermGen.

Ici quelques options pour paramétrer 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 sera déclencher une collecte des ordures la première fois qu'il est dépassé;

-XX:InitialBootClassLoaderMetaspaceSize=32M pour augmenter la classe boot loader Metaspace;

-XX:MinMetaspaceFreeRatio=50 pour faire pousser plus agressivement les Métaspaces;

-XX:MaxMetaspaceFreeRatio=80 pour réduire les risques de rétrécissement des Métaspaces;

-XX:MinMetaspaceExpansion=4M le minimum de la taille par lequel un Metaspace est exanded;

-XX:MaxMetaspaceExpansion=16M la taille maximale pour étendre une métastase sans GC complet.

37
répondu apangin 2018-02-07 08:14:26

bien qu'il existe déjà accepté de répondre, je voulais mentionner qu'il y a aussi :

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

ici,

la collecte des ordures des classes mortes et classloaders est déclenchée une fois que l'utilisation des métadonnées de classe atteint la "MaxMetaspaceSize".

Il y a une liste d'options disponibles dans ce post.

11
répondu Ravindra HV 2016-05-10 14:40:12