使用IBM heapAnalyzer分析heap dump文件步骤

 

1.            如何产生 java heap dump

当 JVM中对象过多, java堆( java heap)耗尽时,就会产生 java heap dump文件。另外,可以使用工具或命令显示地产生该文件。在命令行中程序执行过程中按 ctrl+break可以产生,使用工具如, IBM HeapAnalyzer, Sap Memory Analyzer以及 eclipse memory analyzer都可以在指定状态产生 dump文件。

2.            如何分析 java heap dump 文件

这里以使用 ibm heapAnalyzer工具为例说明;在 ibm网站https://www14.software.ibm.com/webapp/iwm/web/reg/download.do?source=AW-0IN&S_PKG=0IN&lang=en_US&cp=UTF-8下载 ha395.zip文件,后面数字是版本号。解压后用命令行进入到解压目录,使用如 java –Xmx800m –jar ha395.jar启动工具,如果启动过程中发现控制台有java.lang.OutOfMemoryError出现,可以适当加大上面的数字( 800),给予更多的空间。

然后“ Open”产生的 dump文件,打开画面如下,文件很大的话需要等待一段时间

 

ibm heapAnalyzer工具在打开时已经进行了基本的分析,上面全部完成后,会出现如下结果:

[-photo didnot display-]

 

除了显示该要结果外,还生成了一棵树。这个画面先不要关,直到你不再需要这个 dump了。

基本术语:

[-photo didnot display-]

 

然后对上面的界面做一下简单的介绍。

 

[-photo didnot display-]

每个节点树的大小占总的堆栈大小,如 94%,然后是这个类的在内存中的大小,后面 5个子对象,注意这个子对象的意思不是继承关系中的子类,而是上面定义的:如果 A对象参考 B对象,则 B对象是 A对象的子对象。

然后该工具根据分析结果把可能产生泄漏的对象显示了出来。如下图:

 

[-photo didnot display-]

分析根据主要是 child object和 parent object的大小差别程度,如果子对象不大,而父对象超级大,很可能是因为父对象是一个集合类(如数组),包含了大量子对象作为元素。

工具栏:

 

[-photo didnot display-]

点击分析工具栏的表格图标,显示出下面的统计表格,可以点击栏标题进行排序。各标题意思简单介绍如下:

TotalSize:这个对象,以及这个对象的所有子对象(以及子对象的子对象,也就是从这个对象可以参考到的所有对象)的大小的总和,单位为 bits;

Size:       这个对象的大小,如第一个 56bits = 56/8bytes = 7b;

No.Child:子对象的个数,不包括子对象的子对象;

No.Parent:父对象的个数,不包括父对象的对象;

Name:对象的名称。

Address:对象在 heap中的地址。

3.            分析结果

3.1         大量的以 java/util/HashMap$Entry为元素的数组,占据了总堆栈的 8%,很高的比例。

3.2         大量的 java/util/Hashtable$HashtableEntry为元素的数组,占据总堆栈的 5%。

3.3         3.2里面的数组大量指向 java/util/Hashtable$HashtableCacheHashEntry 对象。

根据分析,最有嫌疑的对象应该是 java/util/HashMap$Entry 。

 

4.            其他经验收集:

“ Heapdump工具的使用很简单,难点在于找到 “内存泄漏的真正原因 ”,一般需要通过多个 heapdump 文件的对比才能找到 。 ”

“ ObjectInputStream/ObjectOutputStream 要注意内存泄漏 .  reset()”

“因为 JDK 的问题,如果使用的是: J2RE 5.0 IBM J9 2.3AIX ppc-32 build j9vmap3223-20070201 ,这个SR4的版本有个问题就是,限定了类加载器可加载的类数量,默认为 8192 ,如果超过此限制,就会抛出 OutOfMemory 的错误 。 ”

对于这个问题,可以设置增加类加载器可加载的类数量解决。

5.            知识补充介绍

5.1         堆 (Heap) 和非堆 (Non-heap) 内存 
按照官方的说法: “Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。 ”“ 在 JVM 中堆之外的内存称为非堆内存 (Non-heap memory)” 。可以看出 JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是 Java 代码可及的内存,是留给开发人员使用的;非堆就是 JVM 留给自己用的,所以方法区、 JVM 内部处理或优化所需的内存 ( 如 JIT 编译后的代码缓存 ) 、每个类结构( 如运行时常数池、字段和方法数据 ) 以及方法和构造方法的代码都在非堆内存中。 

5.2         堆内存分配 
JVM 初始分配的内存由 -Xms 指定,默认是物理内存的 1/64 ; JVM 最大分配的内存由 -Xmx 指定,默认是物理内存的 1/4 。默认空余堆内存小于 40% 时, JVM 就会增大堆直到 -Xmx 的最大限制;空余堆内存大于 70% 时,JVM 会减少堆直到 -Xms 的最小限制。因此服务器一般设置 -Xms 、 -Xmx 相等以避免在每次 GC 后调整堆的大小。 

5.3         非堆内存分配 
JVM 使用 -XX : PermSize 设置非堆内存初始值,默认是物理内存的 1/64 ;由 XX:MaxPermSize 设置最大非堆内存的大小,默认是物理内存的 1/4 。 

5.4         JVM 内存限制 ( 最大值 )
首先 JVM 内存限制于实际的最大物理内存 ,假设物理内存无限大的话, JVM 内存的最大值跟操作系统有很大的关系。简单的说就 32 位处理器虽然可控内存空间有 4GB, 但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB (一般来说 Windows 系统下为 1.5G -2G , Linux 系统下为 2G -3G ),而 64bit 以上的处理器就不会有限制了。

 

转自:http://blog.youkuaiyun.com/wuyaowen2000/article/details/4514424

 

分析 Java heap dump工具之IBM HeapAnalyzer IBM HeapAnalyzer是一款免费的JVM内存堆的图形分析工具,它可以有效的列举堆的内存使用状况,帮助分析Java内存泄漏的原因。   下载解压后有一个ha413.jar  运行环境要求: 1、使用 Java 2 Platform,JDK 1.6或以上来运行IBM HeapAnalyzer 2、然后配置好环境变量 运行命令: jav 阅读详情

相关推荐

IBM HeapAnalyzer分析Java堆内存泄漏实战指南

Java内存管理是性能优化的核心领域,其中堆内存泄漏是常见问题根源。通过Heap Dump文件分析可以准确定位内存异常,IBM HeapAnalyzer作为专为IBM JDK优化的工具,能高效解析对象引用链和内存占用分布。该工具特别适合WebSphere等中间件环境,提供泄漏嫌疑报告、类直方图等关键视图,帮助开发者识别集合类泄漏、缓存未清理等典型问题。掌握对比分析和OQL查询等高级技巧,可系统化解决生产环境中的内存溢出问题,配合jmap等命令实现全生命周期内存监控。

weixin_34221276的博客 451

使用 IBM HeapAnalyzer 分析堆转储快照文件的

ha456.jar 为IBM HeapAnalyzer工具文件名。

weixin_41827053的博客 2081

IBM HeapAnalyzer:Java堆内存分析与泄漏检测实战

Java堆内存分析是性能优化和故障排查的关键技术,通过解析堆转储文件(heap dump)可以定位内存泄漏和对象分配问题。IBM HeapAnalyzer作为专为IBM技术栈优化的工具,在分析WebSphere等企业级应用时展现出独特优势。该工具采用支配树和类直方图等核心算法,能有效识别集合类泄漏、缓存失控等典型内存问题,特别适合运行在IBM Power架构服务器上的Java应用。结合OQL查询语言和自动化分析流程,开发者可以快速定位char[]、String等高频内存占用对象,提升在分布式系统和大规模企业

diaoju3333的博客 378

IBM HeapAnalyzer简介使用

IBM®HeapAnalyzer   创建者:Jinwoo Hwang(JinwooHwang.com)     欢迎来到IBM HeapAnalyzer。IBM HeapAnalyzer允许您使用其获得专利的启发式搜索引擎查找可能的Java™堆泄漏,并分析Java堆转储。   介绍 Heapdump包含堆中所有对象的列表。此工具分析Java SDK 1.3.1,1.4.x,5.0

东境物语 1万+

IBM Heap analyzer

IBM开发的强大的内存dump分析工具,,IBM heapAnalyzer是通过分析OOM后的Java heap dump文件的,通过对dump文件的分析找到内存可能泄露的点

使用IBM性能分析工具HeapAnalyzer解决生产环境中的性能问题

应用系统本身的优化是至关重要的,否则即使有再大的内存,也会被消耗殆尽,尤其是产生 OOM(Out Of Memory)的错误的时候,它会贪婪地吃掉你的内存空间,直到系统宕机...

实例讲解:使用IBM heapAnalyzer分析heap dump文件步骤

<! /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; ms

七月之花的技术专栏 4万+

ibm-java-堆内存分析工具-heapanalyzer

ibm-java-堆内存分析工具-heapanalyzer

实例讲解:使用IBM heapAnalyzer分析heap dump文件步骤 .

需求动机:解决 OOM( Object Out of Memory)问题以及系统调优   1.            如何产生 java heap dump 当 JVM中对象过多, java堆( java heap)耗尽时,就会产生 java heap dump文件。另外,可以使用工具或命令显示地产生该文件。在命令行中程序执行过程中按 ctrl+break可以产生,使用工具如, IBM

xu1314的专栏 6153

ibm heapanalyzer

主要用于分析oom产生的日志;可以用于离线分析;完全脱离原有程序

Heap Analyzer

快速定位可能发生内存泄露的区域,提高排查效率,由于jvisualvm或jmap生成的dump文件太大,常常需要用到dump文件分析工具对dump文件进行分析。HeapAnalyzer通过分析heapdump文件,以了解哪些对象占用了太多的堆栈空间,来发现导致内存泄露或者可能引起内存泄露的对象。启动后使用open file菜单,浏览打开我们需要进行内存堆栈分析的heapdump文件

如何产生获取WAS的heapdump

1,进%WAS_HOME%/profiles/AppSrv01/bin     执行./wasadmin.sh     然后回打印出was的基本信息。 如:WebSphere:name=JVM,process=server1,platform=proxy,node=RH5Node01,j2eeType=JVM..... 2,然后执行 set  objectName [$Adm

hbu_zhy的专栏 1552

如何搭建pikachu靶场

Pikachu靶场本地搭建指南 下载安装PHPStudy并启动Apache/MySQL服务 获取Pikachu靶场源码并解压到网站根目录 配置数据库连接信息(修改config.inc.php文件) 创建pikachu数据库(用户名/密码设为root) 访问http://localhost/pikachu测试功能 常见问题:数据库连接失败需检查服务状态和配置信息,页面报错需检查PHP版本兼容性。建议使用PHP7.3/7.4版本,在隔离环境中搭建使用。 (150字)

2401_85351702的博客 1276

用IBM HeapAnalyzer分析二进制dump文件

附上Eclipse Mat分析dump文件方法:https://www.cnblogs.com/liangzs/p/8489321.html 执行命令: ./ParseHeapDump.sh xx org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components 环境:li...

my201110lc的博客 9683

MOS管开关设计知识-(五种MOS管开关电路图方式)

在使用MOS管设计开关电源或者马达驱动电路的时候,大部分人都会考虑MOS的导通电阻,最大电压等,最大电流等,也有很多人仅仅考虑这些因素。这样的电路也许是可以工作的,但并不是优秀的,作为正式的产品设计也是不允许的。 下面是我对MOSFET及MOSFET驱动电路基础的一点总结,其中参考了一些资料,非全部原创。包括MOS管的介绍,特性,驱动以及应用电路。 1、MOS管种类和结构 MOSFET管是FET的...

树卡花 7万+

nature子刊:MCNN基于电池故障诊断的模型约束的深度学习方法

本研究提出了一种基于模型约束神经网络(MCNN)的锂离子电池在线故障诊断方法,整合物理模型与深度学习,有效解决了随机工况下传统方法诊断精度低、依赖故障样本等问题。通过统计修正电池包模型和双向LSTM网络,实现了电池状态的高精度预测(平均RMSE 3.9%),并设计模型耦合自动编码器提取可解释特征。在包含18.2百万条真实车辆数据的验证中,该方法故障检测TPR在FPR=0.1时达85%,较基准方法提升超46.5%,且能提前30分钟预警内部短路等故障。研究还展示了算法在跨电池包结构迁移中的优越性,为工业应用提供

hasakie的博客 1758

IBM HeapAnalyzer

大家在开发J2EE应用时可能经常碰到OOM的问题。出现这种问题的原因就是内存消耗殆尽,创建新的对象时没有可分配的内存了。为了找到真正导致OOM的原因,这里将使用IBMheapAnalyzer工具进行定位。 首先要知道,IBM heapAnalyzer是通过分析OOM后的Javaheap dump文件的,通过对dump文件的分析找到内存可能泄露的点。了解这个之后,我们首先需要生成dump文件,...

a1510841693的博客 1592

Ollama模型路径迁移实战:Windows/Mac/Linux三系统保姆级教程(附常见问题排查)

本文提供了一份详细的Ollama模型路径迁移教程,涵盖Windows、macOS和Linux三大操作系统。针对默认安装路径占用系统盘空间的问题,文章指导用户如何安全移动模型文件、配置环境变量、重启服务,并附有迁移后的验证步骤与常见问题排查方法,帮助用户高效管理本地AI模型存储。

gray5的博客 543

从Dump文件到问题定位:IBM HeapAnalyzer在生产环境中的高级应用

本文深入探讨了IBM HeapAnalyzer在生产环境中分析大型Java堆dump文件的高级应用。文章超越了基础操作,重点解析了如何利用保留堆分析、支配树、OQL查询等核心功能,结合多维排查方法论,精准定位内存泄漏根源。通过真实案例拆解,展示了从工具分析到代码修复的完整闭环诊断流程,助力中高级工程师高效解决复杂生产问题。

f0g1h2的博客 541

CANoe VLAN配置的艺术:如何通过脚本自动化实现高效车载网络测试

本文深入探讨了CANoe VLAN配置的自动化实现,通过CAPL脚本与Python工具链的结合,提升车载网络测试效率。重点解析了硬件侧VLAN配置与软件侧VLAN配置的交互机制,并提供了实用的脚本开发示例和调试技巧,帮助工程师快速构建高效的自动化测试方案。

qqq44的博客 617

手把手教你用Simulink搭建级联H桥储能变流器仿真模型(附SOC均衡分析)

本文详细介绍了如何使用Simulink搭建级联H桥储能变流器仿真模型,并附有SOC均衡分析。从仿真环境准备、单相H桥单元建模到多模块级联方案和SOC均衡策略实现,逐步指导读者完成复杂系统的构建与优化。通过关键仿真结果分析和工程实践问题排查,帮助读者掌握级联H桥储能变流器的核心技术与应用方法。

weixin_42524226的博客 445

java内存泄漏--heap dump 文件分析

一、phd格式分析工具--MAT 1.MAT工具 下载地址:https://www.eclipse.org/mat/downloads.php ps:mat不支持phd格式文件,需安装插件dtfj 2.安装插件DTFJ 全称(Diagnostic Tool Framework for Java) 2.1下载地址 http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/runtimes/tools/dtfj/ 2.2 操作方.

Yee_20 3909

【大模型+知识图谱】哈工大版chinese-roberta-wwm-ext模型介绍、下载部署和GPU显卡配置

RoBERTa模型的一个重要改进版本,由阿里云的研究团队提出。而Chinese RoBERTa-wwm-ext则是针对中文文本的预训练模型,它在哈工大的研究团队手中进一步优化,特别适用于中文自然语言处理任务。

知识靠谱的博客 2773

从OOM到问题定位:IBM HeapAnalyzer分析Java堆dump文件的完整流程

本文详细介绍了使用IBM HeapAnalyzer工具分析Java堆dump文件的完整流程。从环境准备、加载文件、初步诊断,到深入引用链分析和结合代码验证,系统性地讲解了如何从OOM问题中定位内存泄漏根源。文章强调了保留大小、GC Roots等核心概念,并提供了生产环境下的实用技巧与最佳实践。

joy55的博客 215

华为OD机试真题 新系统 9月16号 【统计特殊数字】

华为OD新系统机试真题【统计特殊数字】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【统计特殊数字】。

qq_45776114的博客 766

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 关于Spring编程事务分析
下一篇: 浅谈SQL Server中的快照
cwfmaker
博客等级 码龄18年 6粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值