我想弄清楚为什么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,我可以很容易地获得系统属性和类路径,但却找不到正常运行时间的方法。
我正在做一个项目,我有两个线程一起运行。这个项目是一个模拟银行,本质上,我们有一个存款线程和一个取款线程。我有一个存款线程经常运行的问题,导致银行账户的余额上升。(我希望现实生活中也有这个问题。)如何减少一个线程运行的时间? 这是我的主要课程: 以下是取款和存款线程类: 最后她是交易类: 我试图让线程在达到锁定条件之前进入睡眠状态,但不幸的是,它不起作用。