讲工具进阶如何利用找到问题发生根本原因海量资源.pdfVIP

讲工具进阶如何利用找到问题发生根本原因海量资源.pdf

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

本文由简悦SimpRead转码,原文地址

我们知道,在用户输入的时,会使用一些hash算法对进行加工,比如SHA-1。这些信息

同样不允许在日志输出里出现,必须做脱敏处理,但是对于一个拥有系统权限的者来说,这些防护

依然是不够的。者可能会直接从内存中获取明文数据,尤其是对于Java来说,由于提供了jmap这

一类非常方便的工具,可以把整个堆内存的数据dump下来。

比如,“我的世界”这一类使用Java开发的游戏,会比其他语言的游戏更加容易一些,所以我们在

JVM中,如果把为char数组,其安全性会稍微高一些。

这是一把双刃剑,在保证安全的前提下,我们也可以借助一些外部的分析工具,帮助我们方便的找到问

题根本。

有两种方式来获取内存的快照。我们前面提到过,通过配置一些参数,可以在发生OOM的时候,

dump一份堆栈信息,这是一种;另一种,就是通过jmap主动去获取内存的快照。

jmap命令在Java9,使用jhsdb命令替代,它们在用法上,区别不大。注意,这些命令本身会占

用操作系统的资源,在某些情况下会造成服务响应缓慢,所以不要频繁执行。

jmap-dump:format=b,file=heap.bin37340

jhsdbjmap--binaryheap--pid37340

1.工具介绍

有很多工具能够帮助我们来分析这份内存快照。面已多次提到VisualVm这个工具,它同样可以加

载和分析这份dump数据,虽然比较“寒碜”。

专业的事情要有专业的工具来做,今天要介绍的是一款专业的开源分析工具,即MAT。

MAT工具是基于Eclipse平台开发的,本身是一个Java程序,所以如果你的堆快照比较大的话,则需

要一台内存比较大的分析机器,并给MAT本身加大初始内存,这个可以修改安装中的

MemoryAnalyzer.ini文件。

来看一下MAT工具的截图,主要的功能都体现在上了。其中,默认的启动界面,展示了占用内

存最高的一些对象,并有一些常用的快捷方式。通常,发生内存泄漏的对象,会在快照中占用比较大的

,分析这些比较大的对象,是我们切入问题的第一步。

点击对象,可以浏览对象的关系,这是一个非常有用的功能:

outgoingreferences对象的引出

incomingreferences对象的引入

pathtoGCRoots这是快速分析的一个常用功能,显示和GCRoots之间的路径。

另外一个比较重要的概念,就是浅堆(ShallowHeap)和深堆(RetainedHeap),在MAT上经常看

到这两个数值。

浅堆代表了对象本身的内存占用,包括对象自身的内存占用,以及“为了”其他对象所占用的内存。

深堆是一个统计结果,会循环计算的具体对象所占用的内存。但是深堆和“对象大小”有一点不同,

深堆指的是一个对象被回收后,能够释放的内存大小,这些被释放的对象集合,叫做保留集

(RetainedSet)。

如上图所示,A对象浅堆大小1KB,B对象2KB,C对象100KB。A对象同时了B对象和C对

象,但由于C对象也被D,所以A对象的深堆大小为3KB(1KB+2KB)。

A对象大小(1KB+2KB+100KB)A对象深堆A对象浅堆。

2.代码示例

importjava.util.ArrayList;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

importjava.util.stream.IntStream;

publicclassObjects4MAT{

staticclassA4MAT{

B4MATb4MAT=newB4MAT();

}

staticc

文档评论(0)

159****9610 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6044052142000020

1亿VIP精品文档

相关文档