关于Heap Dump

转载自   关于Heap Dump

Heap Dump是什么?

Heap Dump也叫堆转储文件,是一个Java进程在某个时间点上的内存快照。Heap Dump是有着多种类型的。不过总体上heap dump在触发快照的时候都保存了java对象和类的信息。通常在写heap dump文件前会触发一次FullGC,所以heap dump文件中保存的是FullGC后留下的对象信息。

我们可以通过Heap Dump做哪些事情?

一般在Heap Dump文件中可以获取到(这仍然取决于heap dump文件的类型)如下信息:

  • 对象信息:类、成员变量、直接量以及引用值;

  • 类信息:类加载器、名称、超类、静态成员;

  • Garbage Collections Roots:JVM可达的对象;

  • 线程栈以及本地变量:获取快照时的线程栈信息,以及局部变量的详细信息。

也就是说我们可以对上面这些内容进行分析。通常可以基于Heap Dump分析如下类型的问题:

  • 找出内存泄漏的原因;

  • 找出重复引用的jar或类;

  • 分析集合的使用;

  • 分析类加载器。

总而言之我们对Heap Dump的分析就是对应用的内存使用进行分析,从而更加合理地使用内存。

怎样获取Heap Dump?

获取heap dump有多种方式,可以通过参数配置在特定的条件下触发堆转储,也可以通过工具来获取。

1. 通过OutOfMemoryError获取heap dump

通过设置如下的JVM参数,可以在发生OutOfMemoryError后获取到一份HPROF二进制Heap Dump文件:

-XX:+HeapDumpOnOutOfMemoryError

生成的文件会直接写入到工作目录。

这个方案适用于如下版本的虚拟机:Sun JVM (1.4.2_12 or higher and 1.5.0_07 or higher), HP-UX JVM (1.4.2_11 or higher) and SAP JVM (since 1.5.0)。

2. 主动触发Heap Dump

也可以为虚拟机设置下面的参数,这样就可以在需要的时候按下CTRL+BREAK组合键随时获取一份heap dump文件。

-XX:+HeapDumpOnCtrlBreak


3. 使用HPROF agent

使用agent可以在程序执行结束时或者收到SIGQUIT信号时生成dump文件。使用agent也是要配置虚拟机参数的:

-agentlib:hprof=heap=dump,format=b

这种方式我没有试过,具体如何做的不是很清楚。

4. 使用jmap

这个算是用的最多的方式了吧。也很简单,执行下面的命令就可以了:

jmap -dump:format=b,file=<filename.hprof> <pid>

5. 使用jconsole

启动一个应用后,打开<JAVA_HOME>/bin/jconsole.exe,在jconsole中选择正在运行的应用:


(在这个例子中选择的是eclipse,虽然进程名称为空,但是通过重启eclipse可以确认)。

建立连接后,选择页签MBean,执行com.sun.management. HotSpotDiagnostic下的操作dumpHeap。第一个参数p0是要获取的dump文件的完整路径名,记得文件要以.hprof作为扩展名(要在Memory AnalysisPerspective下打开扩展名必须是这个)。如果我们只想获取live的对象,第二个参数p1需要保持为true。

建议将导出的dump文件保存到一个独立的文件夹,在接下来的分析中会通过这个文件创建很多图表文件。

6. 使用Memory Analyzer

如果要获取dump文件的Java进程和Memory Analyzer在同一台机器上,可以直接使用Memory Analyzer获取dump文件。采用这种方式获取dump文件后会直接将之解析并在Memory Analyzer中打开(这个方式我不太喜欢,因为会在用户目录下生成很多零碎的文件)。

获取heap dump是受虚拟机支持的一种特定的功能。Memory Analyzer提供了一些被称为Heap Dump Provider的概念:比如支持Sun虚拟机(需要用到Sun JDK的jmap功能)的Provider或支持IBM虚拟机(也需要一个IBM JDK)的Provider。此外,Memory Analyzer也提供了对用户自定义的Heap Dump Provider插件的扩展支持。

要使用Memory Analyzer获取dump文件需要先打开Memory AnalysisPerspective,而后点击File -> Acquire Heap Dump…菜单项。之后会打开如下窗口:

在上图中,根据具体的运行环境,预装的Heap Dump Provider按照默认设置展示了当前正在运行的java进程列表。一些Heap Dump Provider也允许(或者说需要)设置一些额外的参数(比如heap dump的类型),这个可以点击Configure按钮来设置。选择要dump的线程,点击Next按钮就可以生成dump文件了。

有的时候进程列表可能为空,这时有必要调整下Heap Dump Provider的设置了。点击Configure按钮,选择合适的provider并点击,然后找到要做调整的参数并做设置就好了。

此外,IBM的虚拟机还有自己的一套方法,这里就不写出了。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用StyleCop 进行代码评审

使用StyleCop对原代码进行审查&#xff0c;看编写的代码是否遵循设计规范、.Net约定和一些贯用法等。保证代码的一致性&#xff0c;可读性等等。 在此之前&#xff0c;先简单介绍下FxCop&#xff08;起初只是微软内部使用的工具&#xff09;,一个分析托管程序集&#xff0c;检测…

系统架构师5 ***********那就给个合格分了。111

https://download.csdn.net/download/sun_lq/11109495 https://download.csdn.net/download/u011669055/10736374 https://download.csdn.net/download/robertsoft/10747039 十年IT从业背景&#xff0c;一次考试通过系统分析师(通过系统分析师的学习 ... [复制链接] 发表于 …

2012三年大专计算机试题医学,计算机原理2012年4月真题(02384)

计算机原理2012年4月真题及答案解析(02384)计算机原理2012年4月真题及答案解析(02384)&#xff0c;该试卷为计算机原理自考历年真题试卷&#xff0c;包含答案及详细解析。一、单项选择题(本大题共15小题&#xff0c;每小题2分&#xff0c;共30分)在每小题列出的四个备选项中只有…

JVM内存管理------JAVA语言的内存管理概述

转载自 JVM内存管理------JAVA语言的内存管理概述引言 内存管理一直是JAVA语言自豪与骄傲的资本&#xff0c;它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节&#xff0c;只专注于业务逻辑。不过世界上不存在十全十美的好事&#xff0c;在带来了便利的同时&#xf…

微软市值今天涨了 250 亿,这家离我们越来越远的公司,为什么生意反倒越来越好了?

纳德拉上台两年半&#xff0c;微软市值已经涨了 50% 今天早上&#xff0c;微软发布了今年第三季度的财报。受云计算和 Office 业务推动&#xff0c;财报后的盘后交易里&#xff0c;微软股价上涨 5.9%、市值涨了超过 250 亿美元——收购 LinkedIn 的钱差不多就回来了。 财报发布…

系统架构设计师考试 重要的部分

系统架构师考试比较的难&#xff0c;属于软件工程师考试中的高级考试&#xff0c;有选择题&#xff0c;分析题&#xff0c;论文&#xff0c;请坚持。 这是高产似母猪啊。 1.每天2小时&#xff0c;坚持了4年考过了软件设计师&#xff0c;系统架构师&#xff0c; 四年时间花了大…

计算机文化基础分析总结,《计算机文化基础实训》教学方案设计与课题分析总结.doc...

《计算机文化基础实训》教学方案设计与课题分析总结.doc《计算机文化基础一实训》教学方案设计与课题分析总结袁良风&#xff3b; 】我院自开展木课题研宄工作以来&#xff0c;紧紧围绕“项目教学法”教学的应 用问题&#xff0c;积极主动地开展专题研究和教改实验&#xff0c;…

Oracle数据库基本概念理解(2)

--删除用户 drop user sz cascade; --创建表空间 create tablespace worktablsp datafile C:\app\lenovo\oradata\orcl\EMPTB.dbf SIZE 5MAUTOEXTEND ON; --修改表空间 ALTER tablespace worktablsp ADD datafile C:\app\lenovo\oradata\orcl\EMPTB.dbf SIZE 5M;--扩展数据文件…

Java中关于String类型的10个问题

转载自 Java中关于String类型的10个问题1. 如何比较两个字符串&#xff1f;用“”还是equals 简单来说&#xff0c;“”是用来检测俩引用是不是指向内存中的同一个对象&#xff0c;而equals()方法则检测的是两个对象的值是否相等。只要你想检测俩字符串是不是相等的&#xff…

[ASP.NET Core] Static File Middleware

前言 本篇文章介绍ASP.NET Core里&#xff0c;用来处理静态档案的Middleware&#xff0c;为自己留个纪录也希望能帮助到有需要的开发人员。 ASP.NET Core官网 结构 一个Web站台最基本的功能&#xff0c;就是在接收到从「浏览器传入」的HTTP Request封包后&#xff0c;将站台内所…

JVM 优化经验总结

转载自 JVM 优化经验总结开始之前 Java 虚拟机有自己完善的硬件架构, 如处理器、堆栈、寄存器等&#xff0c;还具有相应的指令系统。JVM 屏蔽了与具体操作系统平台相关的信息&#xff0c;使得 Java 程序只需生成在 Java 虚拟机上运行的目标代码 (字节码), 就可以在多种平台上不…

2016年10月20日 .NET Core 1.0.2 更新

我们今天发布了一个更新&#xff0c;解决了在macOS Sierra系统上安装的问题。 更改仅限于macOS安装程序。 运行时或工具没有更改; .NET Core 1.0.1仍是Windows和Linux的最新版本&#xff0c;最新的Microsoft.NETCore.App版本仍为1.0.1。 您现在可以下载更新的.NET Core 1.0.2 m…

window7连接其他计算机的打印机,win7系统电脑怎样连接其它电脑上在打印机?

2017-12-02 回答方法/步骤1第一步&#xff1a;设置共享打印机电脑。(a电脑)单击【开始】-【设备和打印机】或点击【开始】/【控制面板】/【硬件和声音】/【设备和打印机】&#xff0c;打开【添加设备】和【添加打印机】窗口&#xff0c;如图1所示2设置要共享的打印机&#xff0…

系统架构设计师考试999999999999

系统架构师考试比较的难&#xff0c;属于软件工程师考试中的高级考试&#xff0c;有选择题&#xff0c;分析题&#xff0c;论文&#xff0c;请坚持。 这是高产似母猪啊。 1.每天2小时&#xff0c;坚持了4年考过了软件设计师&#xff0c;系统架构师&#xff0c; 四年时间花了大…

Java启动参数与内存调优一些学习笔记

转载自 Java启动参数与内存调优一些学习笔记 .参数的含义-Xms128m JVM初始分配的堆内存 -Xmx512m JVM最大允许分配的堆内存&#xff0c;按需分配 -XX:PermSize64M JVM初始分配的非堆内存 -XX:MaxPermSize128M JVM最大允许分配的非堆内存&#xff0c;按需分配 JVM内存模型 …

Oracle数据库基本概念理解(3)

/*| PL/SQL编程*/ --声明变量 DECLAREV_NAME VARCHAR2(20); --一般变量V_AGE NUMBER(2);v_id SUN.TUSER.USERID%TYPE:14;--属性变量v_user SUN.TUSER%ROWTYPE; --行属性变量 BEGIN--赋常量值V_NAME:Tom;V_AGE :20;DBMS_OUTPUT.put_line(姓名&#xff1a;||V_NAME||年…

服务器io修改,更改 Linux I/O 调度器来改善服务器性能

为了从 Linux 服务器榨取尽可能多的性能&#xff0c;请了解如何更改 I/O 调度器以满足你的需求。Linux I/O 调度器()控制内核提交读写请求给磁盘的方式。自从 2.6 内核以来&#xff0c;管理员已经能够更改这个调度器&#xff0c;所以他们可以自定义他们的平台以完全适合他们的需…

如何合理的规划一次 JVM 性能调优

转载自 如何合理的规划一次 JVM 性能调优摘要: JVM性能调优涉及到方方面面的取舍&#xff0c;往往是牵一发而动全身,需要全盘考虑各方面的影响&#xff0c;那么如何进行一次优雅的调优&#xff0c;提升应用的性能&#xff1f;这是 JVM 优化系列第三篇&#xff1a;JVM 调优系列…

服务器复制不了文档,服务器复制粘贴不了

服务器复制粘贴不了 内容精选换一换帮助用户完成专属云服务器备份任务的创建&#xff0c;快速完成服务器数据保护。专属云服务器不支持应用一致性备份。当专属对象存储的容量不足时&#xff0c;会导致专属云服务器备份创建失败。已开通专属对象存储。登录管理控制台。单击&…