如何从正在运行的 JVM 中捕获堆转储

Res*_*hef 4 jvm amazon-ec2 elasticsearch

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

sudo jmap -dump:format=b,file=heap.hprof {processID}
Run Code Online (Sandbox Code Playgroud)

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

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

sudo -u elasticsearch jmap -dump:format=b,file=heap.hprof {processID}
Run Code Online (Sandbox Code Playgroud)

错误:

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

没有权限

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

sudo -u elasticsearch sh -c "sudo jmap -dump:format=b,file=heap.hprof {processID}"
Run Code Online (Sandbox Code Playgroud)

[sudo] 弹性搜索密码:

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

Pet*_*rey 6

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

sudo -u elasticsearch jmap -dump:format=b,file=/tmp/es-heap.hprof {processID}
Run Code Online (Sandbox Code Playgroud)