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