dump堆内存时遇到的异常 : Unable to open s
2019-03-04 本文已影响0人
海边的贝壳林
我使用jmap来dump堆内存的时候遇到了下列的错误
[root@node03 ~]# jmap -dump:format=b,file=heap.hprof 9017
9017: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding
在网上找到原因: 使用jmap
dump 堆内存的时候, 要使用运行这个程序的用户去dump, 其他用户不可以的.
所以刚刚那个命令应该是这样的:
[root@node03 ~]# ps -ef| grep 9017
kafka 9017 1 0 Feb12 ? 02:38:07 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64/jre/bin/javaxxxxxxxxxx
## 发现是kafka用户启动的程序. 所以下面以kafka用户身份去执行jmap的dump操作.
[root@node03 ~]# sudo -u kafka jmap -dump:format=b,file=heap.hprof 9017
标个重点: sudo -u [user] jmap -dump:format=b,file=heap.hprof [pid]
这里的-dump:format=b,file=heap.hprof
可以换成jmap
的其他命令, 比如: sudo -u [user] jmap -histo [pid]
下面是我参考的网址答案.
I just found that jmap (and presumably jvisualvm when using it to generate a heap dump) enforces that the user running jmap must be the same user running the process attempting to be dumped.