【问题标题】:How to Capture a Heap Dump from a Running JVM如何从正在运行的 JVM 中捕获堆转储
【发布时间】:2016-08-28 19:13:13
【问题描述】:

我有一个在 ec2 亚马逊服务器上运行的 Elasticsearch 集群。正如article 中所述,从正在运行的 JVM 捕获堆转储的方法是使用 jmap:

sudo jmap -dump:format=b,file=heap.hprof {processID}

错误: {processID}:已知文件不安全

Jmap 需要运行该进程的用户,所以我必须执行如下命令:

sudo -u elasticsearch jmap -dump:format=b,file=heap.hprof {processID}

错误:

将堆转储到 /home/ubuntu/heap.hprof ...

权限被拒绝

所以我想我必须像这样使用 jmap:

sudo -u elasticsearch sh -c "sudo jmap -dump:format=b,file=heap.hprof {processID}"

[sudo] elasticsearch 的密码:

elasticsearch 用户密码是什么?有一些默认值吗?我没有找到任何解决方案...

【问题讨论】:

    标签: elasticsearch amazon-ec2 jvm


    【解决方案1】:

    您需要将要写入的目录设置为可写入的用户,或者您可以使用每个用户都可以写入的目录,例如

    sudo -u elasticsearch jmap -dump:format=b,file=/tmp/es-heap.hprof {processID}
    

    【讨论】:

    • @Rada 感谢您的支持! ;)
    【解决方案2】:

    解决方案是以 root 身份运行 jmap,但要确保该文件可被 Java 应用程序写入。认为jmap向java应用发送dump命令,但是dump是在里面运行的

    sudo jmap -dump:format=b,file=/path/to/writable/directory/by/elastic/user/heap.hprof {processID}

    就是这样

    【讨论】:

      猜你喜欢
      • 2020-04-27
      • 2022-10-19
      • 2013-12-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 2019-07-31
      • 2015-07-03
      • 1970-01-01
      相关资源
      最近更新 更多