使用 JCMD 进行 Java 线程转储

标签 java hprof jmc jcmd

我在 Ubuntu Linux 机器上使用 Java1.8。使用以下命令创建线程转储:

jcmd 1670 Thread.print > Thread.jfr

将文件复制到本地 MAC 机器并双击在 JMC 中打开。未能打开。怎么打开呢?

我尝试在安装了内存分析器的 STS 中打开相同的文件,它无法识别 jfr 文件。

1)上述方法有什么问题?

2)分析线程和堆转储的最佳工具是什么?

3) 堆或线程转储大小是否取决于 RAM 大小?我们有 64 GB RAM 系统,分配给其中一台应用程序服务器 40GB。这有什么问题吗?

最佳答案

1) JFR 文件是由 JDK Flight Recorder 生成的包含大量信息的文件。它是二进制格式。您不能仅重命名文本线程堆栈转储以使其成为飞行记录。

2) 取决于您要寻找的内容。 Eclipse MAT 非常适合堆转储。如果您想做堆浪费分析,JOverflow 很好(请参阅我的博客 http://hirt.se/blog/?p=854 )。 JMC 有一个线程分析插件,但我已经习惯了拥有比线程堆栈转储更丰富的信息。我建议仔细看看 JFR 和 JMC。

3) 堆转储将与 Java 堆上的实时数据成比例,具体取决于转储方式。线程堆栈转储将与线程数量和跟踪深度成正比。

如果您想了解更多信息,请查看此博客: http://hirt.se/blog/?p=939

关于使用 JCMD 进行 Java 线程转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51662997/

相关文章:

java - 从源代码构建 BouncyCaSTLe 1.47 jar

clojure - 请帮助我理解这些 Clojure Hprof 痕迹

android - Android Studio 中具有高内存分配的堆转储永远不会完成

Java 飞行记录器 : Does it need JMX readwrite access or is readonly enough?

java - 如何在 JMC 控制台中获取被阻止语句的堆栈跟踪?

java - 这个迭代方法可以递归实现吗?

java - 通过 TomEE plus 服务器连接到 POJO?

java - 如何在xml中映射@Field

java - 有什么方法可以分析截断的 Java 堆转储(hprof 文件)?

java - 如何使用JMC连接远程WildFly?