Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何获取JVM堆转储文件

如何获取JVM堆转储文件

作者头像
FunTester
发布于 2019-12-04 09:39:27
发布于 2019-12-04 09:39:27
1.3K00
代码可运行
举报
文章被收录于专栏:FunTesterFunTester
运行总次数:0
代码可运行

堆转储是诊断与内存相关的问题(例如内存泄漏缓慢,垃圾回收问题和 java.lang.OutOfMemoryError。它们也是优化内存消耗的重要工具。

有很多很不错的的工具,例如Eclipse MAT和Heap Hero,可以分析堆转储。但是,您需要为这些工具提供以正确的格式和正确的时间点捕获的堆转储。

本文为您提供了捕获堆转储的多个选项。但是,我认为前三个是有效的选择,而其他三个则是个不错的选择。

jmap

jmap打印堆转储到指定的文件位置。该工具打包在JDK中。可以在JAVA_HOMTE\bin文件夹中找到它。

这是调用jmap的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jmap -dump:format=b,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:format=b,file=/opt/tmp/heapdump.bin 37320

  • 注意:参数“live”选项非常重要。如果传递了此选项,则仅将内存中的存活的对象写入堆转储文件。如果未通过此选项,则所有对象,即使是准备进行垃圾回收的对象,都将打印在堆转储文件中。它将大大增加堆转储文件的大小。这也将使分析变得乏味无聊。要解决内存问题或优化内存,只选用“live”选项就足够了。

HeapDumpOnOutOfMemoryError

当应用程序遇到java.lang.OutOfMemoryError时,理想的方法是立即捕获堆转储以诊断问题,因为您想知道java.lang.OutOfMemoryError发生时内存中有哪些对象以及它们占据的内存百分比。但是,由于很多方面的原因,大多数情况下,IT/运营团队都无法及时捕获堆转储。不仅如此,他们还重新启动了应用程序。如果没有在正确的时间捕获堆转储,就很难诊断出任何内存问题。

这就是该选项非常方便的地方。在应用程序启动期间传递“ -XX:+ HeapDumpOnOutOfMemoryError”系统属性时,JVM将在JVM遇到OutOfMemoryError时立即捕获堆转储。

用法:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tmp/heapdump.bin

  • 注意:捕获的堆转储将在'-XX:HeapDumpPath'系统属性指定的位置打印。
  • 最佳实践:始终保持在所有应用程序中配置此属性,因为您永远不知道何时会发生OutOfMemoryError。

jcmd

jcmd工具用于将诊断命令请求发送到JVM。它打包为JDK的一部分。可以在JAVA_HOMTE\bin文件夹中找到它。

这是调用jcmd的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jcmd <pid> GC.heap_dump <file-path>
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.

例:

jcmd 37320 GC.heap_dump /opt/tmp/heapdump.bin

JVisualVM

JVisualVM是一个监视,故障排除工具,打包在JDK中。启动此工具时,您可以看到本地计算机上正在运行的所有Java进程。您也可以使用此工具连接到在远程计算机上运行的Java进程。

步骤:

  • JAVA_HOMTE\bin文件夹下启动jvisualvm
  • 右键单击其中一个Java进程
  • 点击下拉菜单上的“堆转储”选项
  • 将生成堆转储
  • 将在“摘要”选项卡>“基本信息”>“文件”部分中指定生成堆转储的文件路径。

从JVisualVM捕获堆转储

JMX

有一个com.sun.management:type=HotSpotDiagnostic MBean。此MBean具有“dumpHeap”操作。调用此操作将捕获堆转储。'dumpHeap'操作采用两个输入参数:

  • outputFile:应将堆转储写入的文件路径
  • live:传递“ true”时,仅捕获堆中的活动对象

您可以使用JConsole,jmxsh,Java Mission Control 等JMX客户端来调用此MBean操作。我这里使用了jconsole:

使用JConsole作为JMX客户端来生成堆转储

编程代码

除了使用工具之外,您还可以以编程方式从应用程序中捕获堆转储。在某些情况下,您可能希望基于应用程序中的某些事件来捕获堆转储。可以通过调用com.sun.management:type=HotSpotDiagnostic MBean JMX Bean,提供了从应用程序捕获堆转储的源代码。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java HeapDump 生成解析
堆转储是诊断在Java虚拟机中与内存相关的问题的重要文件,例如内存泄漏、应用请求缓慢,垃圾回收问题以及各种各样的java.lang.OutOfMemoryError异常。堆转储文件也是优化、分析内存消耗的重要工具。
Luga Lee
2021/12/09
1.5K0
Java HeapDump 生成解析
一次通过dump文件分析OutOfMemoryError异常代码定位过程
OutOfMemoryError是Java程序中常见的异常,通常出现在内存不足时,导致程序无法运行。
codetrend
2024/05/06
4960
一次通过dump文件分析OutOfMemoryError异常代码定位过程
使用JDK自带工具进行JVM内存分析之旅
本文将通过一次jvm内存分析过程来说明jps、jcmd、jstat、jstack 和 jmap 工具的使用方法。
codetrend
2024/04/19
2K0
使用JDK自带工具进行JVM内存分析之旅
JVM学习.05 JVM常见的排障和调优
前面介绍了JVM相关的内存和线程相关的技术。对于JVM也算有了一个比较系统、完整的理论基础。理论总是作为指导实践的工具,但是从理论到实践,总会遇到一些虚拟机相关问题,故障。所以还需要学习一些常用的JVM排障工具,和一些常见的调优手段。
有一只柴犬
2024/01/25
2660
JVM学习.05 JVM常见的排障和调优
美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
小伙伴们,有没有遇到过程序突然崩溃,然后抛出一个OutOfMemoryError的异常?这就是我们俗称的OOM,也就是内存溢出。简单来说,就是你的Java应用想要的内存超过了JVM愿意给的极限,就会抛出这个错误。
程序员江小北
2024/02/24
9340
美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
性能监控之常见 Java Heap Dump 方法
性能监控之常见 Java Heap Dump 方法 关键,今天去目录下面没有看到有heapdump.bin文件了。
oktokeep
2024/10/09
2100
没有日志,有什么办法能知道“这个任务跑到哪了?”
找到名为main的线程,并点击 可以看到 目前main线程执行到BigTaskTest.java类的第21行
烟雨平生
2024/11/23
700
没有日志,有什么办法能知道“这个任务跑到哪了?”
糟糕,线上OOM了该怎么办,JVM heap dump快速分析
在故障定位(尤其是out of memory)和性能分析的时候,经常会用到一些文件辅助我们排除代码问题。这些文件记录了JVM运行期间的内存占用、线程执行等情况,这就是我们常说的dump文件。常用的有heap dump和thread dump(也叫javacore,或java dump)。我们可以这么理解:heap dump记录内存信息的,thread dump记录CPU信息。
架构师修炼
2020/07/20
7K0
糟糕,线上OOM了该怎么办,JVM heap dump快速分析
【JVM进阶之路】八:性能监控工具-命令行篇
在实际的故障排查、性能监控中,常常是操作系统的工具和Java虚拟机的工具结合使用。
三分恶
2021/04/09
1.2K0
【JVM进阶之路】八:性能监控工具-命令行篇
怎么用JDK自带工具进行JVM内存分析
本文将通过一次jvm内存分析过程来说明jps、jcmd、jstat、jstack 和 jmap 工具的使用方法。
阿珍
2024/07/15
3030
怎么用JDK自带工具进行JVM内存分析
oom如何定位问题?纯实战教程!
针对每种类型的 OutOfMemoryError,正确的解决方案通常包括对应用程序的内存管理进行优化、调整JVM参数,以及使用合适的工具来分析和监控内存使用情况。
一只牛博
2025/05/31
900
oom如何定位问题?纯实战教程!
Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
9.Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
刘大猫
2025/05/23
1180
【译】创建和分析 Java 堆转储(Heap Dumps)
作为 Java 开发人员,我们熟悉我们的应用程序抛出 OutOfMemoryErrors 或我们的服务器监控工具抛出警报并抱怨 JVM 内存利用率高。
东溪陈姓少年
2021/07/14
1.7K0
【译】创建和分析 Java 堆转储(Heap Dumps)
JVM生成的这3种文件,你都见过吗?
Java 虚拟机(JVM)生成3个关键文件,这些文件对于JVM优化性能和解决生产问题非常有用。这些文件是:
Java宝典
2021/01/14
8070
排查Java的内存问题
核心要点 排查Java的内存问题可能会非常困难,但是正确的方法和适当的工具能够极大地简化这一过程; Java HotSpot JVM会报告各种OutOfMemoryError信息,清晰地理解这些错误信息非常重要,在我们的工具箱中有各种诊断和排查问题的工具,它们能够帮助我们诊断并找到这些问题的根本原因; 在本文中,我们会介绍各种诊断工具,在解决内存问题的时候,它们是非常有用的,包括: HeapDumpOnOutOfMemoryError和PrintClassHistogram JVM选项 Eclipse MA
用户1263954
2018/04/08
2.9K0
排查Java的内存问题
面经手册 · 第26篇《JVM故障处理工具,使用总结》
其实最好的方式就是归纳、整理、实践、输出,一套组合拳下来,你就掌握了这个系列的知识了。
小傅哥
2021/01/18
1.2K0
面经手册 · 第26篇《JVM故障处理工具,使用总结》
捕获Java线程转储(Thread Dump)的几种方法
线程转储是Java进程中所有线程状态的快照。每个线程的状态通过堆栈跟踪(Stack Trace)呈现,展示线程的调用栈内容。线程转储对诊断问题非常有用,因为它能揭示线程的活动信息。
崔认知
2025/04/02
1810
捕获Java线程转储(Thread Dump)的几种方法
【干货】JVM 优化、内存泄露排查、gc.log 分析方法等
本文讲解了 JVM 的内存划分和分配策略,并以截图和脚本展示常用可视化和命令行工具的使用方法,完整演示了 JVM 优化、内存泄露排查、gc.log 分析方法等。
IT技术小咖
2019/06/26
5.8K0
【干货】JVM 优化、内存泄露排查、gc.log 分析方法等
生成 Heap Dump 的几种方式
Heap Dump 概述 Heap Dump 是 Java进程所使用的内存情况在某一时间的一次快照。以文件的形式持久化到磁盘中。 Heap Dump的格式有很多种,而且不同的格式包含的信息也可能不一样。但总的来说,Heap Dump一般都包含了一个堆中的Java Objects, Class等基本信息。同时,当你在执行一个转储操作时,往往会触发一次GC,所以你转储得到的文件里包含的信息通常是有效的内容(包含比较少,或没有垃圾对象了) 。 Heap Dump 包含的信息 所有的对象信息 对象的类信息、字段
java404
2018/05/18
3.5K0
Java ThreadDump 生成解析
当有我们的服务器CPU资源使用率(usr%)较高时,或者是一个基于 JAVA 的 Web 应用运行的比预期慢的时候,我们需要使用 Thread Dumps进行分析。线程转储是诊断CPU尖峰,死锁,响应时间差,内存问题,应用程序无响应以及其他系统问题的一项重要工作或者环节。
Luga Lee
2021/12/09
9190
Java ThreadDump 生成解析
推荐阅读
相关推荐
Java HeapDump 生成解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验