42

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

我希望能够使用jmap,jstackjstat,还希望查看所有变量的值。

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

4

10 回答 10

44

好的,如果您使用 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 是您的常规核心文件。

于 2009-07-28T08:38:02.850 回答
12

如果您使用的是IBM JVM,请下载IBM Thread and Monitor Dump Analyzer。这是一个很好的工具。它提供线程详细信息并可以指出死锁等。以下博客文章提供了有关如何使用它的很好的概述。

于 2014-03-11T01:04:59.257 回答
5

也许 VisualVM 可以提供帮助(我自己还没有机会尝试)。关联:

http://java.sun.com/javase/6/docs/technotes/guides/visualvm/coredumps.html

于 2009-06-04T15:03:21.943 回答
5

你确定核心转储是你想要的吗?这将包含正在运行的 JVM 的原始内容,而不是 java 级别的信息。也许 JVM 堆转储更适合您。

于 2009-06-04T15:22:28.567 回答
2

请参阅http://www.oracle.com/technetwork/java/javase/tsg-vm-149989.pdf。您可以直接在核心文件上使用“jdb”。

于 2011-05-13T19:56:28.863 回答
2

实际上,VisualVM 可以处理应用程序核心转储。

只需调用“文件/添加 VM Coredump”,即可在应用程序资源管理器中添加一个新应用程序。然后,您可以获取该 JVM 的线程转储或堆转储。

于 2009-10-22T07:03:40.430 回答
1

试试lady4j堆栈分析器,它可以帮助你:

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

于 2010-05-20T21:07:43.587 回答
0

IBM 提供了许多可以在 sun jvm 上使用的工具。看看 alphaworks 上的一些项目,它们提供了堆和线程转储分析器

卡尔

于 2009-06-04T15:02:24.643 回答
0

我推荐你试试Netbeans Profiler。它有丰富的实时分析工具。来自 IbM 的工具值得一试进行离线分析

于 2009-06-04T15:12:09.507 回答
0

jhat 是我迄今为止使用过的最好的之一。要进行核心转储,我认为您最好使用 jmap 和 jps 而不是 gcore(我没有使用过)。查看链接以了解如何使用 jhat。 http://www.lshift.net/blog/2006/03/08/java-memory-profiling-with-jmap-and-jhat

于 2010-07-27T07:00:57.443 回答