首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在最少停机时间的窗口中进行堆转储?

如何在最少停机时间的窗口中进行堆转储?
EN

Stack Overflow用户
提问于 2016-03-04 09:55:09
回答 1查看 4.8K关注 0票数 4

我想知道为什么JVM堆在Elasticsearch节点上的使用率一直保持在80%以上。为了做到这一点,我通过运行

代码语言:javascript
运行
复制
jmap.exe -heap:format=b 5348

(5348是进程ID)。然后我就可以用VisualVM来分析转储。

问题是jmap在进行转储时暂停JVM,因此节点基本上离线大约5分钟。

这篇文章提出了一种更快的方法,它依赖于在Linux上使用gdb。我已经尝试过WinDbg,它创建了一个核心转储,但是我无法在VisualVM中使用它。

Windows有类似的方法吗?怎样才能在几秒钟内,而不是几分钟内,就能得到堆转储?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-06 01:57:16

在您通过WinDbg获取核心节点之后,您需要通过运行

代码语言:javascript
运行
复制
jmap -heap:format=b "C:\Program Files\Java\...\bin\java.exe" core.mdmp

这可以脱机完成;不需要与运行Java进程进行交互。然后,您将能够在heap.bin中打开生成的VisualVM。

或者,您可以使用类直方图。它产生的速度比全堆转储更快。

代码语言:javascript
运行
复制
jmap -histo <PID>

它显示了实例在堆中占据最大空间的类的列表。这些信息通常足以让人知道内存丢失在哪里。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35792936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档