java8 “de java.lang.OutOfMemoryError: Metaspace”

Après le passage de notre application java (services en cours d'exécution sur Tomcat) JRE de Java 7 pour Java 8, nous avons commencé à voir java.lang.OutOfMemoryError: Metaspace après l'exécution de quelques jours avec un volume élevé de trafic.

L'utilisation du tas était OK. Metaspace sauts après quelque temps, lorsque le même flux de code a été exécuté au cours des tests de performances.

Ce que pourrait être les causes possibles de l'metaspace problème de mémoire?

Les réglages actuels:

-server -Xms8g -Xmx8g -XX:MaxMetaspaceSize=3200m  -XX:+UseParNewGC 
-XX:+UseConcMarkSweepGC -XX:MaxGCPauseMillis=1000 
-XX:+DisableExplicitGC -XX:+PrintGCDetails 
-XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=7 -XX:NewSize=5004m 
-XX:MaxNewSize=5004m -XX:MaxTenuringThreshold=12 
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly -XX:+PrintFlagsFinal  
-XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution 
-XX:+PrintGCCause -XX:+PrintAdaptiveSizePolicy 
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=3 -XX:GCLogFileSize=200M 

Également l'application a une utilisation intensive de la réflexion. Nous avons également utiliser un chargeur de classe. Tous d'entre eux fonctionnent très bien dans java 7.

Difficile à diagnostiquer sans le profilage de la mémoire, mais êtes-vous générer des classes dynamiquement au moment de l'exécution?
Puis-je supposer que la machine hôte a effectivement l'8g de ram physique disponible? Comme, gratuit, ne l'utilisez pas.
nous n'avons pas que de nombreuses classes dynamiques.
oui, il a près de 15 GO de libre.
plumbr.ue/outofmemoryerror/metaspace

OriginalL'auteur Jane | 2016-03-17