2017-07-14 2 views
1

Nous utilisons le JDK 8 et certains de nos processus donnent à OOM un espace de classe compressé. Nous enregistrons GC et notre fichier statistics.log jvm donne actuellement le type d'entrées de journal suivant:java comment suivre et régler l'espace de classe de compression

2017-06-30 03: 57: 07,944 INFO - HEAP - [USAGE: 1678.7, GRATUIT: 986.7, TOTAL: 2665.5 MAX: 2665,5]; PERM - [USAGE: N/A, GRATUIT: N/A, MAX: N/A]; CLASSES - [Chargé: 1832624, Déchargé: 637, Gauche: 1831987]; THREADS - [Count: 92]

Nous nous demandons si l'ajout des drapeaux "-XX: + TraceClassUnloading -XX: + TraceClassLoading" nous permet de savoir quelle valeur nous devons définir pour "l'espace de classe compressé" (-XX : CompressedClassSpaceSize)? Si oui, comment déterminons-nous la taille à partir des journaux de trace?

+3

Lorsque vous ne savez pas quelle est la meilleure valeur pour cette option, ne spécifiez pas cette option et laissez la JVM choisir. Si vous pensez que les classes 1832624 sont assez grandes, vous pouvez rechercher des fuites dans votre application. – Holger

Répondre

2

Vous pouvez utiliser -XX:-UseCompressedClassPointers pour désactiver l'espace de classe compressé, ce qui devrait permettre à la JVM de charger autant de classes que possible en mémoire au lieu de la zone de mémoire virtuelle de classe compressée limitée. L'inconvénient sont des pointeurs de classe plus grands dans les en-têtes d'objet.

Mais comme @Holger mentionné dans les commentaires, vous devez vous assurer que votre application ne fuit pas les classes au fil du temps, sinon la consommation de mémoire ne cessera de croître.

+0

Notre application utilise JAXB. Je soupçonne que nous pourrions avoir ce problème: https://stackoverflow.com/questions/3259291/do-i-have-a-jaxb-classloader-leak – anjanb