如何分析来自Java核心转储的信息?
如果一个进程崩溃,离开核心转储,或者我用gcore
创build一个,那我该如何分析呢?
我想能够使用jmap
, jstack
, jstat
等,也看到所有variables的值。
这样我可以find崩溃或冻结JVM的原因。
好的,如果你已经用gcore或者gdb创build了核心转储,那么你需要把它转换成一个叫做HPROF文件的东西。 这些可以由VisualVM,Netbeans或Eclipse的内存分析工具(以前的内存分析器)使用。 我build议Eclipse MAT。
要转换文件,请使用命令行工具jmap 。
# jmap -dump:format=b,file=dump.hprof /usr/bin/java core.1234
哪里:
dump.hprof是您希望创build的hprof文件的名称
/ usr / bin / java是生成核心转储的java二进制版本的path
核心.1234是你的核心文件。
如果您正在使用IBM JVM ,请下载 IBM线程和监视器转储分析器 。 这是一个很好的工具。 它提供了线程的细节,可以指出死锁等。下面的博客文章提供了一个很好的概述如何使用它。
也许VisualVM可以帮助(还没有机会自己尝试)。 链接:
http://java.sun.com/javase/6/docs/technotes/guides/visualvm/coredumps.html
你确定核心转储是你想要的吗? 这将包含正在运行的JVM的原始内容,而不是Java级别的信息。 也许JVM堆转储更多的是你需要的。
实际上,VisualVM可以处理应用程序核心转储。
只需调用“文件/添加虚拟机Coredump”,并将在应用程序资源pipe理器中添加一个新的应用程序。 然后,您可以执行该JVM的线程转储或堆转储。
试试lady4j堆栈分析器,它可以帮助你:
IBM提供了许多可以在sun jvm上使用的工具。 看看Alphaworks上的一些项目,他们提供了堆和线程转储分析器
卡尔
我build议你试试Netbeans Profiler。它有丰富的实时分析工具。 来自IbM的工具值得尝试离线分析
jhat是我迄今使用过的最好的之一。为了获得核心转储,我认为你最好使用jmap和jps而不是gcore(我还没有使用它)。查看链接以了解如何使用jhat。 http://www.lshift.net/blog/2006/03/08/java-memory-profiling-with-jmap-and-jhat
请参阅technetwork/java/javase/tsg-vm-149989.pdf 。 您可以直接在核心文件上使用“jdb”。