Je suis à la recherche dans le débogage d'une erreur "OutOfMemoryError: Metaspace" dans mon application. Juste avant le oome que je vois ce qui suit dans les journaux gc:Comment mesurer la fragmentation dans le métaspace de Hotspot?
{Heap before GC invocations=6104 (full 39):
par new generation total 943744K, used 0K [...)
eden space 838912K, 0% used [...)
from space 104832K, 0% used [...)
to space 104832K, 0% used [...)
concurrent mark-sweep generation total 2097152K, used 624109K [...)
Metaspace used 352638K, capacity 487488K, committed 786432K, reserved 1775616K
class space used 36291K, capacity 40194K, committed 59988K, reserved 1048576K
2015-08-11T20:34:13.303+0000: 105892.129: [Full GC (Last ditch collection) 105892.129: [CMS: 624109K->623387K(2097152K), 3.4208207 secs] 624109K->623387K(3040896K), [Metaspace: 352638K->352638K(1775616K)], 3.4215100 secs] [Times: user=3.42 sys=0.00, real=3.42 secs]
Heap after GC invocations=6105 (full 40):
par new generation total 943744K, used 0K [...)
eden space 838912K, 0% used [...)
from space 104832K, 0% used [...)
to space 104832K, 0% used [...)
concurrent mark-sweep generation total 2097152K, used 623387K [...)
Metaspace used 352638K, capacity 487488K, committed 786432K, reserved 1775616K
class space used 36291K, capacity 40194K, committed 59988K, reserved 1048576K
}
D'après ce que je peux voir, la capacité Metaspace est même pas en voie de la taille engagée (dans ce cas, -XX:MaxMetaspaceSize=768m
). Je suspecte donc la fragmentation de Metaspace, ce qui empêche l'allocateur de trouver un nouveau segment pour le nouveau classloader.
Je connais -XX:PrintFLSStatistics
mais cela ne concerne que le CMS, pas la mémoire native. Donc, ma question est la suivante: y a-t-il une aide au débogage similaire à PrintFLSStatistics
disponible pour la mémoire native de Hotspot?
Utilise la machine virtuelle serveur Java HotSpot (TM) 64 bits (25.45-b02) pour linux-amd64 JRE (1.8.0_45-b14).
Belle trouvaille, je suis en train de construire une version de débogage et de les essayer. – mabi