sve*_*i-n 3 jvm jmap heap-dump elasticsearch
我想弄清楚为什么Elasticsearch节点上的JVM堆使用率始终保持在80%以上.为了做到这一点,我通过运行来进行堆转储
jmap.exe -heap:format=b 5348
Run Code Online (Sandbox Code Playgroud)
(5348是进程ID).然后我可以使用VisualVM分析转储.
问题是jmap
在进行转储时暂停JVM,因此节点基本上处于脱机状态大约5分钟.
本文提出了一种更快的方法,它依赖于gdb
在Linux 上使用coredump .我已经尝试过WinDbg,它创建了一个核心转储,但我无法在VisualVM中使用它.
Windows有类似的方法吗?如何在几秒钟内完成堆转储,而不是几分钟?
在您获取coredump之后WinDbg
,您需要通过运行从中提取堆转储
jmap -heap:format=b "C:\Program Files\Java\...\bin\java.exe" core.mdmp
Run Code Online (Sandbox Code Playgroud)
这可以离线完成; 不需要与运行Java进程的交互.然后,您将能够heap.bin
在VisualVM中打开生成的内容.
或者,您可以采用类直方图.它的生成速度比完全堆转储快.
jmap -histo <PID>
Run Code Online (Sandbox Code Playgroud)
它显示了实例占用堆中空间最多的类的列表.这些信息通常足以让人了解内存丢失的位置.
归档时间: |
|
查看次数: |
2551 次 |
最近记录: |