当前位置: 首页 > 面试题库 >

如何以最少的停机时间在Windows中进行堆转储?

云卓
2023-03-14
问题内容

我想弄清楚为什么Elasticsearch节点上的JVM堆使用率始终保持在80%以上。为了做到这一点,我通过运行一个堆转储

jmap.exe -heap:format=b 5348

(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

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

或者,您可以获取班级直方图。它产生的速度比完整堆转储的速度快。

jmap -histo <PID>

它显示了其实例在堆中占据最大空间的类的列表。这些信息通常足以使您了解丢失内存的位置。



 类似资料:
  • 问题内容: docker-compose.yml 如果更改文件,如何在最小的停机时间内重新加载容器以使用新的环境变量? 问题答案: 如果您使用docker-compose运行yml,则可以运行它,它将重新创建所有具有更改的容器,并保持所有不变的服务不变。 如果您使用版本3文件格式运行容器,则可以对服务进行滚动更新,如果您有多个服务实例在运行,它将防止任何停机。此功能仍是非常新的功能,您需要1.13

  • 问题内容: 我知道JVM参数。我也知道,这将要求堆转储。 问题: 如何确保我首先进行完整的堆转储, 然后 在转储完成后强制重新启动(或终止)?是我最好的选择吗? 问题答案: JVM将首先转储堆,然后执行OnOutOfMemoryError命令(证明)。

  • 问题内容: 我目前正在研究Java硒项目,该项目通常是一个小脚本,在该脚本中,我必须检查每个元素是否存在,并基于该操作触发了一些操作,但我们主要关心的是完成脚本的持续时间。 基本上,我在脚本中使用了下面的每个脚本并进行了测试,尽管在每种情况下脚本都在运行,但是我发现脚本执行持续时间的速度提高很少。 和它一起 要么 我知道我可以使用CSS选择器,但由于DOM Tree结构的原因,这是不可行的。什么可

  • 问题内容: 如何在Python中进行时间延迟? 问题答案: 这是另一个示例,其中某件事大约每分钟运行一次:

  • 我正在分析几个堆转储,并对从堆转储获得JVM正常运行时间(或启动时间)的方法感兴趣。使用eclipse memory analyzer,我可以很容易地获得系统属性和类路径,但却找不到正常运行时间的方法。

  • 我正在做一个项目,我有两个线程一起运行。这个项目是一个模拟银行,本质上,我们有一个存款线程和一个取款线程。我有一个存款线程经常运行的问题,导致银行账户的余额上升。(我希望现实生活中也有这个问题。)如何减少一个线程运行的时间? 这是我的主要课程: 以下是取款和存款线程类: 最后她是交易类: 我试图让线程在达到锁定条件之前进入睡眠状态,但不幸的是,它不起作用。