【问题标题】:how to record and generate JVM heap dump of running process till it completes如何记录和生成正在运行的进程的 JVM 堆转储,直到它完成
【发布时间】:2016-05-13 15:06:36
【问题描述】:

基本上,我在 linux 机器上运行一个 java 进程,并且能够使用以下命令捕获 JVM 内存的堆转储,但我认为这可能不是正确的方法,因为我捕获堆的时间可能没有完整且正确的对象状态(它们可能仍在运行,因为进程仍在运行)。

所以我想知道如何获取完整流程执行的堆转储。现在我没有遇到任何内存不足的问题,而是进行故障排除以找出哪些对象正在使用更高的内存或疑似泄漏。

jmap <pid> <filepathtogeneratedheap>

【问题讨论】:

  • 如果您的意思是需要对整个执行过程进行某种记录,我建议您使用 Java Mission Control。它与 JDK 捆绑在一起。
  • 好的,谢谢。另外,只是想知道如果我们在使用 Jmap 之间生成转储,它不会给出正确的堆内存对象摘要图片,不是吗?
  • 实际上我在 Linux 机器上的远程 JVM 上运行我的进程,我只有在那台机器上的读取权限,我不知道 JVM 在那台机器上运行在哪个端口上。如何使用 VisualVM 或 Java Mission Control 记录远程进程而不是在 windows 上?
  • 你可以试试jvm-object-inspector,虽然它是实验性的并且有巨大的性能损失
  • 使用 Jmap 转储应该为您提供有关已分配堆的正确信息。但是您必须努力将每个转储关联起来以提取趋势或演变。

标签: java jvm


【解决方案1】:

实际上,对于正在运行的进程,生成堆转储并不是一个好主意。我通过让 JVM 在抛出 OutOfMemoryError 时生成堆转储解决了这个问题

【讨论】:

    猜你喜欢
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2013-01-01
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多