我在ec2 amazon服务器上运行了一个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用户密码是什么?有一些默认值吗?我没有找到任何解决方案...
答案 0 :(得分:2)
您需要创建要写入的目录,可以写作用户写入,或者您可以使用每个用户可以写入的目录,例如。
sudo -u elasticsearch jmap -dump:format=b,file=/tmp/es-heap.hprof {processID}
答案 1 :(得分:0)
解决方案是以root用户身份运行jmap,但请确保该文件可被Java应用程序写入。认为jmap将dump命令发送到Java应用程序,但是dump在其中运行了
sudo jmap -dump:format = b,file = / path / to / writable / directory / by / elastic / user / heap.hprof {processID}
就这样