如果进程崩溃并离开核心转储,或者我使用gcore
创建了一个进程,那么我该如何分析它?
我希望能够使用jmap
,jstack
,jstat
等来查看所有变量的值。
通过这种方式,我可以找到崩溃或冻结的JVM的原因。
答案 0 :(得分:41)
好的,如果您使用gcore或gdb创建了核心转储,那么您需要将其转换为名为 HPROF 文件的内容。这些可以由VisualVM,Netbeans或Eclipse的Memory Analyzer Tool(以前称为SAP Memory Analyzer)使用。我推荐Eclipse MAT。
要转换文件,请使用命令行工具 jmap 。
# jmap -dump:format=b,file=dump.hprof /usr/bin/java core.1234
其中:
dump.hprof 是您要创建的hprof文件的名称
/ usr / bin / java是生成核心转储的java二进制版本的路径
core.1234是您的常规核心文件。
答案 1 :(得分:10)
答案 2 :(得分:5)
也许VisualVM可以提供帮助(还没有机会亲自尝试)。链接:
http://java.sun.com/javase/6/docs/technotes/guides/visualvm/coredumps.html
答案 3 :(得分:5)
您确定核心转储是您想要的吗?这将包含正在运行的JVM的原始内容,而不是java级别的信息。也许JVM堆转储更符合您的需求。
答案 4 :(得分:2)
实际上,VisualVM可以处理应用程序核心转储。
只需调用“File / Add VM Coredump”,即可在应用程序资源管理器中添加新应用程序。然后,您可以获取该JVM的线程转储或堆转储。
答案 5 :(得分:1)
试试lady4j堆栈分析器,它可以帮到你:
答案 6 :(得分:1)
见http://www.oracle.com/technetwork/java/javase/tsg-vm-149989.pdf。您可以直接在核心文件上使用“jdb”。
答案 7 :(得分:0)
IBM提供了许多可以在sun jvm上使用的工具。看一下alphaworks上的一些项目,它们提供了一个堆和线程转储分析器
卡尔
答案 8 :(得分:0)
我建议你试试Netbeans Profiler。它有丰富的实时分析工具。 来自IbM的工具值得尝试离线分析
答案 9 :(得分:0)
jhat是迄今为止我用过的最好的之一。要进行核心转储,我认为你最好使用jmap和jps而不是gcore(我还没有使用它)。查看链接以了解如何使用jhat 。 http://www.lshift.net/blog/2006/03/08/java-memory-profiling-with-jmap-and-jhat