如何分析Java核心转储中的信息?

时间:2009-06-04 14:53:30

标签: java analysis coredump

如果进程崩溃并离开核心转储,或者我使用gcore创建了一个进程,那么我该如何分析它?

我希望能够使用jmapjstackjstat等来查看所有变量的值。

通过这种方式,我可以找到崩溃或冻结的JVM的原因。

10 个答案:

答案 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)

如果您使用 IBM JVM download IBM线程和监视器转储分析器。这是一个很好的工具。它提供了线程细节,可以指出死锁等。以下blog post提供了有关如何使用它的很好的概述。

答案 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堆栈分析器,它可以帮到你:

http://www.lady4j.com/solveStack.jsp

答案 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