有没有工具可以从Java8热点虚拟机中获取Metaspace dump?
看起来你遇到了类加载泄漏问题。
使用
jmap -clstats PID
命令来转储类加载器统计信息;jcmd PID GC.class_stats
命令则会打印每个加载的类的内存使用情况的详细信息。后者需要 -XX:+UnlockDiagnosticVMOptions
参数。堆转储也有帮助,因为Metaspace中的每个类都对应着堆中的一个 java.lang.Class
实例。
-XX:NativeMemoryTracking=detail
传递给JVM来启用。然后您可以运行。jcmd <pid> VM.native_memory baseline
建立一个基准。然后在让JVM运行直到问题再次出现后,您可以运行
jcmd <pid> VM.native_memory detail.diff
然后,NMT diff中的Class
分配将提供元空间分配。 orcale docs上有关于NMT的更多信息。