Java7自带分析内存工具在哪_操作方法:Java程序内存分析:使用mat工具分析内存使用情况...

MAT不是通用工具,它不能处理所有类型的堆存储文件。但是,可以更好地解析更多主流制造商和格式,例如Sun,HP,SAP和IBM的PHD堆存储文件使用的HPROF二进制堆存储文件。让我们来看看如何做,这可能对您有用。官方文件:

通常,出现OutOfMemoryError的原因有两个:

1、内存泄漏,该对象已死,并且不能由垃圾收集器自动收集。可以通过找出泄漏代码的位置和原因来确定解决方案;

2、内存溢出,并且内存中的对象仍然必须处于活动状态。这意味着Java堆分配空间不足。检查堆设置大小(-Xmx和-Xms),并检查代码是否具有太长且无法持久的对象生命周期。在某些情况下,状态时间过长。

1.使用jmap生成堆信息

ed9c38dbc4be5e2637ac3df1fbd5c320.png

E盘的jmap文件夹中将有一个map.bin的堆信息文件。

2.将堆信息导入到垫子中进行分析

84e7d9e8e5787e35aecaa44b4bc0dfcd.png

3.生成分析报告

mat可以为我们生成多个报告:

e1b6f7967566485b795be6428ae761a5.png

0ace3d292800744c324f484e6d711918.png

db8acbc6c1d567f6e6f178710bb2e90e.png

f5bf469987818753134b60eb066fcf86.png

让我们看看生成的数据如何为我们提供帮助

43e1cbc002b6229026b294a1596a517f.png

148d55986bb2e09da2a9d43ddc3ff269.png

在上图中,您可以看到其大部分功能。在饼图上,您将找到转储的大小以及类,对象和类加载器的数量。

在下面正确地显示了饼图,其中列出了最令人印象深刻的对象。将鼠标移一下,即可在左侧的对象检查中查看对象的详细信息。在下面的操作标签中:

直方图

1f91ac8f10ec3a4d3c97f3c15f61585e.png

通常,当堆内存量为堆内存量时,浅堆堆中的对象具有与保留内存相同的大小和相同的大小,对象将被垃圾释放并收集。

保留并设置一组主要对象,例如特定类的所有对象,或者由所有对象的特定类加载器加载的类,或者仅仅是一组任意对象,就是释放的组对象。如果所有对象的主要对象均为,则无法访问该设置。保留设置包括这些对象,所有其他对象只能通过这些对象。保留大小是总堆大小中包含的所有对象的保留。来自日食

有关详细说明,我建议您检查“浅堆”和“保留堆”,这是一个非常重要的概念。

1b7fa1fb2ae287dee81260e62eddb937.png

这里使用该工具提供的正则表达式搜索我们自己的类并对其进行排序,以查看哪些类相对较大。

dd4d8860b841787dfbf1ac621282456e.png

在左侧,您可以看到该类的详细用法,例如它所属的包,谁是父类,它所属的类加载器,内存地址,占用的大小和回收状态等。

99b8e1e944543e97ec8a505a8b626c42.png

这里是可以根据您的需要进行分组和搜索的工具。默认情况下,它是按类分组的,类似于sql ~~

中的group by

0d1a86946744caca7cd60d46f222a6e7.png

2b511a95a5bac941a19b4b1897b424a5.png

在这里您可以看到以上三个选项,它们分别生成概览,泄漏可疑物和主要成分数据,但是如果您想在其中查看图表,则此处生成的不是图表。

单击以在(概述)的“操作”选项卡中查看。

这是“概述”中的“堆转储概述”视图,在工具栏上单击它,这是全局内存使用情况信息

已用堆转储

79.7 MB

对象数

1,535,626

班数

8,459

类加载器的数量

74

GC根数

2,722

2584f179e85167340a90739a6534f994.png

格式

hprof

JVM版本

时间

格林威治标准时间+ 0800 9:20:37 AM

日期

2014-7-2

标识符大小

32位

文件路径

E:\ jmap \ map.bin

文件长度

108,102,005

然后,您可以单击SystemProperties和Thread Overview进行查看。我不会在这里发布更多内容。

统治者树

ea163d0f3d7460fe6fb1edb242469c61.png

6be996a824d6271790719a1d74a10a91.png

我们可以看到ibatis占用了更多的内存

主要消费者

808b68ab0ac282d69cf8d1f635885b7f.png

此图显示了占用大量内存的对象的分布。以下是一些特定的班级和人数。

4efcf22c004a5f6b25bc0883dabb5cf2.png

按使用级别实际查看按级别分布的类的用法,java.lang.Class排名第一

47322f195bef12d2a9b32407c2d2e736.png

还有另外一张我们更关心的图片,那就是根据软件包名称查看占用情况。根据包装,我们知道哪个公共jar或我们自己的包装占用了

fd658098e0732746632365fda7bb9e5c.png

通过这种方式,您可以看到程序包以及程序包中的哪些类正在占用更多空间。

嫌疑犯

affff4a9ef2a9084bdd3f6a61221fc81.png

从此报告中我们可以看到图片的暗区被怀疑存在内存泄漏。可以发现整个堆只有79.7M内存,而暗区占62%。因此,MAT通过一个简单的报告解释说该项目具有可疑代码。单击详细信息以查找课程。

12c725abf8fa538d89586796835a750a.png

90f14b339278c7926f44678fa2917a0c.png

e159ec439161b5f53ec324f68aa6fd54.png

f0b7323588ac7bb93ad774a898d108fa.png

单击鼠标,在带有外出引用的“列表对象”->下,可以检查该类所引用的对象,并检查是否存在其他对象引起的内存问题。

让我们继续查看池的gc根目录

选择GC根目录路径->如下所示在上下文菜单中排除弱引用,以过滤掉弱引用,因为弱引用不是解决问题的关键。

只需输入并检查,此处的代码没有问题,因此无需发布。

08ab88c2c35863552cf356a8a230030d.png

类加载器/组件“ org.apache.catalina.loader.WebappClassLoader @ 0xa34cde8”占用19,052,864(2 2. 80%)字节。内存在“ java.util.HashMap $ Entry []”由“”加载的一个实例中累积。

关键字

java.util.HashMap $ Entry []

org.apache.catalina.loader.WebappClassLoader @ 0xa34cde8

此段落在工具中提示。他告诉我们,WebappClassLoader的容量为19,052,864字节。这是tomcat的类加载器。 HashMap是JDK中占用最大的系统类加载器。这实际上是很正常的。人们经常将地图用作存储容器。

除了上一页中的描述之外,还有指向“累积点”和“累积对象”的最短路径部分,这些部分说明了从GC根到聚集点的最短路径,以及完整的参考链。观察“累积对象”部分,java.util.HashMap具有最大的保留堆(大小),因此很明显,类实例是在HashMap中收集的。

d946ba250cbc0e8208cf130169e4eb3f.png

查看“按类分类的累积对象”区域,您可以在其中找到要聚合的对象实例的类名称。标题是java.util.HashMap类。它已被实例化5573次。从这里可以看出,这个程序没有问题,因为这个数字是相对正常的,但是当出现问题时,我们将看到更大的self定义类将位于最前面,并且占用率很高高。

当然,垫子工具有很多用途。在这里,我将与您分享我所知道的。最后,我们需要弄清楚系统的内存使用情况,然后为其制定代码或架构以及服务器优化措施!

参考:

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/shoujiruanjian/article-342039-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值