标题:
利用 Memory Dump Diagnostic for Java (MDD4J) 分析内存管理问题(2)
[打印本页]
作者:
look_w
时间:
2018-8-13 21:50
标题:
利用 Memory Dump Diagnostic for Java (MDD4J) 分析内存管理问题(2)
启动和理解 MDD4J为了充分理解如何使用 MDD4J,您需要了解用于描述内存泄漏的几个术语的含义。图 1 通过名为
MyClass
的示例展示了这些术语,此示例具有一个 HashSet,包含字符串对象。
图 1. 内存泄漏术语
泄漏根:
包含导致泄漏容器的对象链的引用的对象。如果在所有者链中未发现任何类对象,则此术语表示可找到泄漏容器的内存转储中的根对象。
泄漏容器:
唯一拥有所有泄漏对象的对象。在本例中是 HashMap。
泄漏单元:
存在多个实例的数据结构内的对象。在本例中是 HashMap 内的 HashMap$Entry 对象。
所有者链:
从泄漏根对象开始到泄漏容器对象的对象链。
内容:
泄漏根下为堆消耗的大部分负责的实际数据。
另外还有一些未在图 1 中出现的信息,但与内存泄漏相关:
区域大小:
给定对象可接触的所有对象的总大小。在本例中,就是影响泄露根的区域大小的所有对象。
区域大小落差:
一个对象的区域大小和该对象的子对象的区域大小之间的差别。此差别与实例计数的差别是发现泄漏疑点的关键。
MDD4J 的启动与 IBM Support Assistant workbench 中安装的其他工具相同。图 2 显示了 workbench 中的 MDD4J 在启动并完成分析后的状态。在分析完成后,您看到的第一个视图就是 Analysis Summary。(如果希望将 MDD4J 从 workbench 导出到其他机器上,将有一个批处理文件或 shell 脚本可用于运行此工具)。
在下面的几节中,您将了解分析结果在 MDD4J 中的显示方式。所显示的信息针对主转储。
评估分析结果Analysis Summary 是您在分析完成后看到的第一个视图。它显示了分析结果的信息汇总,并提供了堆内容和堆中主要组成部分的快速概览。在这个窗格中,可以确定在堆大小中占最大比例的组件和类型。
图 2. IBM Support Assistant workbench 中的 MDD4J
Analysis Summary 具有三个部分:
Basic Heap Information
(如图 3 所示)显示关于堆和堆转储文件的信息:堆大小、对象数量、对象类型数量、堆转储文件名称和堆转储文件的获取日期。 图 3. Basic Heap Information
High-level Summary of the Heap Contents
(如图 4 所示)显示了两个图表,显示在堆大小中占比例最大的堆转储中的组件和类型。
Predefined Components
图显示了与 Java 和 WebSphere 应用程序中的常用组件相比,各组对象在堆大小中所占的相对比例。
Type Breakdown
图显示了最常用的 Java 类在堆大小中所占的相对比例。
图 4. High-level Summary of the Heap Contents
在 Analysis Summary 视图中,还可访问单一文件的 HTML 报告(如图 2 所示),其中提供了分析结果的汇总。报告包含 MDD4J 中各种视图提供的所有信息,但未显示图形。可利用此报告与您的同事快速共享分析结果。
还可以下载一部分 MDD4J 用户界面(
Data Structures
选项卡,本文稍后将加以介绍),将其作为
Yeti Report
独立报告(如图 2 所示),并保存所得到的 .zip 压缩文件。将压缩文件的内容解压到空目录中,在 Web 浏览器中打开 index.html 文件。关于 Yeti,请参见 。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0