java 堆转储快照

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

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

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


1. jmap

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

这是调用jmap的方法:

 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. 

例:

1个 jmap -dump:format = b,file = / opt / tmp / heapdump.bin 37320

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

2. HeapDumpOnOutOfMemoryError

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

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

用法示例:

1个

注意:捕获的堆转储将在'-XX:HeapDumpPath'系统属性指定的位置打印。


最佳实践 :始终保持在所有应用程序中配置此属性,因为您永远不知道何时发生OutOfMemoryError.jcmd3。

3. jcmd

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

这是调用jcmd的方法:

1个

例:

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

4. JVisualVM

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

脚步:

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

图:从JVisualVM捕获堆转储

5. JMX

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

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

您可以使用JMX客户端(例如JConsole, jmxsh和Java Mission Control)来调用此MBean操作。

图:使用Java Mission Control作为JMX客户端来生成堆转储

6.程序化方法

除了使用工具之外,您还可以以编程方式从应用程序中捕获堆转储。 在某些情况下,您可能希望基于应用程序中的某些事件来捕获堆转储。 这是Oracle的一篇好文章 ,通过调用com.sun.management:type=HotSpotDiagnostic MBean JMX Bean,提供了从应用程序捕获堆转储的源代码,我们在上述方法中对此进行了讨论。

7. IBM管理控制台

如果您的应用程序在IBM Websphere Application Server上运行,则可以使用管理控制台来生成堆。

脚步:

  1. 启动管理控制台
  2. 在导航窗格中,单击故障排除> Java转储和核心
  3. 选择要为其生成堆转储的server_name
  4. 点击堆转储产生堆转储您指定的服务器

您也可以使用wsadmin生成堆转储。

翻译自: https://www.javacodegeeks.com/2019/10/7-options-to-capture-java-heap-dumps.html

java 堆转储快照

java 堆转储快照_捕获Java堆转储的7个选项相关推荐

  1. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  2. java gc回收堆还是栈_浅析JAVA的垃圾回收机制(GC)

    1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制. 注意:垃圾回 ...

  3. java优先队列二叉_二叉堆与Java中的优先队列

    之前在A*算法演示程序的编码过程中,发现javaScript并没有原生的优先队列,于是去Java中找到了PriorityQueue类,研究了一下源码.Java中的优先队列基于最小二叉堆实现.最小二叉堆 ...

  4. java try catch嵌套_解析Java中未被捕获的异常以及try语句的嵌套使用

    Java未被捕获的异常 在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式. class Exc0 { public st ...

  5. java线程卡住排查_基于 Java 线程栈 排查问题

    除日志外,还有没有别的方式跟踪线上服务问题呢?或者,跟踪并排除日志里无法发现的问题? 方法当然是有的,就是通过现场快照定位并发现问题.我们所说的现场,主要指这两方面: Java 线程栈.线程栈是Jav ...

  6. 达内java面试题集_达内java面试题

    JAVA面试题-COREJAVA部分1.在main(String[] args)方法内是否可以调用一个非静态方法?答案:不能2.同一个文件里是否可以有两个public类?答案:不能3.方法名是否可以与 ...

  7. java 版本查看命令_查看Java版本命令如何查看?Java常用命令详解

    现在程序员开发项目都在使用工具,很多人可能都忘记了Java自带命令,下面就让我来介绍些吧. 1.java.exe: 运行java程序,这个相信每一位用Java的人知道了. 2.javac.exe: 编 ...

  8. java pdf插件下载_免费java pdf控件

    云原生的概念和理论体系非常的完备,but talk is cheap , show me the code ! 但是作为一名程序员,能动手的咱绝对不多BB,虽然talk并不cheap , 能跟不同层次 ...

  9. java表底层生产工具_使用Java工具解决生产故障(一)-jcmd介绍

    1.简介 Java开发的应用程序在线上出现生产故障很常见,通常我们会在开发环境模拟此类故障,但偶尔也会遇到无法成功模拟的故障.那么我们就需要在生产环境上进行分析,定位故障产生原因.JDK1.7版本之后 ...

最新文章

  1. ITK:使用FFT与输入图像的掩码图像进行归一化相关
  2. 2016年,我的和自己谈谈
  3. 第一冲刺阶段博客检查
  4. 【POJ - 1486】Sorting Slides(思维建图,二分图求必须边,关建边,图论)
  5. (kruskal)Jungle Roads
  6. gin ajax 获取请求参数,gin请求参数处理
  7. 煤粉粒度对shell气化的影响_提高水煤浆气化有效气成分的措施
  8. Vue插件_自己封装插件_以及使用自定义插件---vue工作笔记0017
  9. jQuery 源码系列(十八)class 相关操作
  10. 2点直线方程 + 3点平面方程
  11. 2019 ICPC西安邀请赛 游记
  12. thinkphp手册
  13. Linux 中的rsh,ssh
  14. Windows安装VMware(Linux系统)
  15. 生物信息学中重要的评价竞赛
  16. SOLIDWORKS快捷键167个小技巧
  17. 中国海洋大学计算机科学与技术考研分数线,中国海洋大学研究生院2020录取分数线...
  18. 2022-08-15 MySQL数据库
  19. 二目运算符是什么意思?
  20. 微信小程序人员组织结构

热门文章

  1. GCD Game HDU - 7061
  2. P3242 [HNOI2015] 接水果(整体二分、扫描线、dfs序)
  3. 动态规划:openjudge 2.6-3532 最大上升子序列和 解题心得
  4. 51nod1600-Simple KMP【SAM,树链剖分】
  5. jzoj6344-[NOIP2019模拟2019.9.7]Huge Counting【组合数,状压dp】
  6. A*,IDA*—高档次的暴搜
  7. Codeforces 786B Legacy (线段树优化建图)
  8. Sentinel(二十)之Envoy RLS Token Server
  9. JavaFX UI控件教程(十五)之Combo Box
  10. 什么是 TCC分布式事务