有没有一种命令行方法来获得除jmap之外的jvm堆转储?
我们在linux中使用oracle jvm 1.8 64bit。
我们知道jmap可以获得jvm堆转储:
jmap -F -dump:format=b,file=***filepath*** ***pid***
但速度很慢。
我们知道,使用JVisualVM和JConsole连接到JMX也可以获得堆转储,并且它非常快速。 但他们与GUI。
但是,在我们的产品环境中,没有GUI。 没有任何带有GUI的机器可以访问该环境。
所以我们的问题是 - JVisualVM和JConsole可以支持命令行来执行堆转储吗? 或者是否有一个命令行方法来获得除jmap之外的jvm堆转储?
我们今天尝试过 -
1,使用jvisualvm(远程jmx),我们可以成功获得堆转储
2,使用没有-F选项的jmap,转储失败:
[root @ panda01〜]#jmap -dump:format = b,file = / tmp / heapdump.31941.hprof 31941
31941:无法打开套接字文件:目标进程未响应或未加载HotSpot虚拟机
当目标进程没有响应时,可以使用-F选项
3,使用带-F选项的jmap,转储成功,但速度慢:
[root @ panda01〜]#jmap -F -dump:format = b,file = / tmp / heapdump.31941.hprof 31941
附加到进程ID 31941,请稍候...
调试器成功连接。
检测到服务器编译
JVM版本是25.92-b14
将堆转储到/tmp/heapdump.31941.hprof ...
创建堆转储文件
我们注意到结果(2.hprof文件)。 带有jvisualvm的文件转储(称为第一次转储)小于使用jmap -F(称为第二次转储)的文件转储。 使用jvisualvm查看第一次转储中的实例数量和大小远小于第二次转储中的实例数量和大小。
使用没有-F
选项的jmap
- 它会更快。
这个答案描述了不同之处。
请注意,没有-F
jmap应该与目标进程在相同的用户/组下运行。
上一篇: Is there a command line method to get a jvm heap dump besides jmap?