idea 堆转储_如何捕获堆转储

堆转储是Java应用程序内存状态的重要快照,用于诊断内存问题。本文介绍了在IntelliJ IDEA中捕获堆转储的几种方法,帮助开发者解决与Java内存管理相关的问题。
摘要由CSDN通过智能技术生成

idea 堆转储

堆转储是Java内存的快照。 它包含有关快照触发时堆中Java对象和类的信息。 诊断任何与Java内存相关的问题都是至关重要的工件。

可以使用多种机制来捕获堆转储。 在这里,我将展示一些有效的方法。

识别流程编号

首先,您需要标识Java进程ID,将为其捕获Heap Dump。 为此,可以使用JDK附带的“ jps”(JVM进程状态)工具。 该工具列出了在目标系统上运行的所有Java进程及其进程ID。

1  jps
2  30548 org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar
3  36292 Jps
4  37320 AddressBook
The first field in each line is the process Id and the second field is the name of the Java program that is running. As per the above example ‘37320’ is the process Id of the AddressBook program.

Alternatively, if you are running on *nix operating system, you can also issue “ps” (process status) command and grep for java processes. Example:
ps -ef | grep 'java'

捕获堆转储– jmap

您可以使用“ jmap”工具捕获堆转储。 jmap将给定进程的堆内存详细信息打印到文件中。 JDK附带了jmap工具。 这是您应如何调用它:

jmap -dump:live,file=<file-path> <pid>

where
pid: is the Java Process Id, whose heap dump should be captured
file-path: is the file path where heap dump will be written in to.

例:

jmap -dump:live,file=/opt/tmp/AddressBook-heapdump.bin 37320

注意:在命令行中传递“实时”选项非常重要。 如果通过此选项,则仅转储堆中的活动对象。 如果您的应用程序以大内存运行,那么捕获堆转储通常会花费很长时间,而工具对其进行解析甚至会花费更长的时间。

“活动”对象是具有活动内存引用的对象。 为了分析内存泄漏,仅活动对象就足够了。

捕获堆转储– HeapDumpOnOutOfMemoryError

您还可以通过传递'-XX:+ HeapDumpOnOutOfMemoryError'系统属性来在JVM遇到OutOfMemoryError时捕获堆转储。 此属性是一个非常有效的属性,我建议所有JVM都配置此属性。 由于当前的热度,有时运维团队可能会忘记捕获堆转储。 没有堆转储,诊断任何内存问题都非常困难。 在这种情况下,此属性可能是今日的救星。 用法示例:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/heapdump

现在您已经了解了如何捕获堆转储。 接下来,阅读如何分析堆转储

Tools to analyze garbage collection :http://gceasy.io/




http:// 

翻译自: https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/How-to-capture-a-heap-dump

idea 堆转储

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值