如果我在JAR(使用mvn assembly:assembly
编译)中有一个类,我正在尝试分析,那么获取有效核心转储的命令是什么,我可以使用jhat或Eclipse Memory Analyzer? / p>
我试过这个:
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中时我该怎么做?
答案 0 :(得分:2)
从JAR文件加载类的事实与堆转储无关。
您可以使用jmap
获取可用的HPROF堆转储,而无需修改启动命令。
jmap -heap:format=b <pid>
您可以使用jps
命令行实用程序获取进程ID。这两个可执行文件都是JDK的一部分。