【发布时间】:2019-01-10 18:41:33
【问题描述】:
我在 Ubuntu Linux 机器上使用 Java1.8。使用以下命令创建了一个线程转储:
jcmd 1670 Thread.print > Thread.jfr
将文件复制到本地MAC机器并双击在JMC中打开。它无法打开。怎么打开?
我尝试在安装了内存分析器的 STS 中打开相同的文件,它无法识别 jfr 文件。
1) 上述方法有什么问题?
2) 分析线程和堆转储的最佳工具是什么?
3) 堆或线程转储大小是否取决于 RAM 大小?我们有 64 GB ram 系统,分配 40 GB 给一个应用服务器。这有什么问题吗?
【问题讨论】:
-
线程和堆转储是不同的东西。堆转储大小取决于 VM 的配置堆大小。线程转储大小取决于活动线程的数量。您可以使用 jdk 中的“jstack”触发到 STDOUT 的线程转储。只有当虚拟机因内存不足错误而停止时(通过虚拟机配置),我才会得到堆转储。我使用 JMAT(eclipse 项目)来分析堆转储。可以使用文本编辑器分析线程转储或上传到某些 Web 服务。如果垃圾收集器停止执行,那么 40GB 的 VM 堆大小可能会成为问题。