如果我在 JAR 中有一个类(用 mvn assembly:assemble
编译),我试图对其进行分析,那么获取有效核心转储的命令是什么,我可以将其与 jhat 或Eclipse 内存分析器?
我尝试运行这个:
java -agentlib:hprof=heap=sites,cpu=samples,file=profile.hprof,format=b -jar the-jar.jar
当我停止进程时,会创建核心转储。
但是 jhat 或 Eclipse Memory Analyzer 都不会将其识别为有效的转储。
jhat 给了我这个警告:
Resolving 0 objects...
WARNING: hprof file does not include java.lang.Class!
WARNING: hprof file does not include java.lang.String!
WARNING: hprof file does not include java.lang.ClassLoader!
还阅读了 hprof 文档,我发现我必须传递类名。当它位于 JAR 内时,我该如何执行此操作?
最佳答案
该类是从 JAR 文件加载的事实与堆转储无关。
您可以使用jmap
来获取可用的HPROF堆转储,而无需修改启动命令。
jmap -heap:format=b <pid>
哪里是您可以使用jps
命令行实用程序获取的进程ID。这两个可执行文件都是 JDK 的一部分。
关于java - 如何分析 jar 内的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13236444/