[发明专利]一种内存分析方法、装置、系统以及计算设备有效
申请号: | 201610906023.8 | 申请日: | 2016-10-18 |
公开(公告)号: | CN107967205B | 公开(公告)日: | 2020-12-29 |
发明(设计)人: | 韩进巍 | 申请(专利权)人: | 阿里巴巴(中国)有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F9/50 |
代理公司: | 北京展翼知识产权代理事务所(特殊普通合伙) 11452 | 代理人: | 屠长存 |
地址: | 310052 浙江省杭州市滨江*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 内存 分析 方法 装置 系统 以及 计算 设备 | ||
本发明公开了一种内存分析方法、装置、系统以及计算设备。其中,通过获取待监控进程的堆数据的内存镜像文件,解析内存镜像文件,以获取预定类型对象的对象信息和对象引用关系,然后基于对象信息确定可疑对象,基于对象引用关系生成可疑对象的对象引用链。由此,针对Java程序的堆占用过大问题,本发明按照长尾理论和实际情况,把分析重点放在大对象上面(例如很长的byte数组),将大对象列为可疑对象,通过获取进程的堆数据中的可疑对象以及可疑对象的引用链,可以找出导致Java程序的堆占用过大问题的原因所在。
技术领域
本发明涉及计算机技术领域,具体涉及一种内存分析方法、装置、系统以及计算设备。
背景技术
在应用开发中,当JVM(Java程序运行所在的虚拟机)因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出OOM(out of memory)错误。
在Java程序中,由于存在了垃圾自动回收机制,所以,一般不用去主动释放不用的对象所占的内存,也就是从理论上来说,是不会存在OOM错误的。但是,如果编码不当,比如,将某个对象的引用放到了全局的Map中,虽然方法结束了,但是由于垃圾回收器会根据对象的引用情况来回收内存,导致该对象不能被及时的回收,使得该对象持续占据内存,容易导致内存不足,进而引发OOM。例如,对于图片缓存,图片往往能够达到10MB以上,而堆空间一般只有200MB,如果图片被展现后没有解除引用关系并回收,那么该图片就会一直占据内存。
因此,在出现OOM错误时,我们希望知道在这个时间点上,到底什么对象占据了该JVM的堆,而现在我们无法准确的获知堆内存消耗异常时刻的对象分布情况。另外,如果在进程的堆内存消耗异常时,我们能够有效地确定此时堆内存中的异常对象的分布情况,也可以有效地避免OOM错误的发生。
由此,需要一种能够有效确定堆内存消耗异常时刻的异常对象的分布情况的内存分析方案。
发明内容
本发明主要解决的技术问题是提供一种内存分析方法、装置、系统以及计算设备,其能够有效地确定堆内存消耗异常时刻的对象分布情况。
根据本发明的一个方面,提供了一种内存分析方法,包括内存镜像解析处理,内存镜像解析处理包括:获取待监控进程的堆数据的内存镜像文件;解析内存镜像文件,以获取预定类型对象的对象信息和对象引用关系;以及基于对象信息确定可疑对象;以及基于对象引用关系生成可疑对象的对象引用链。
由此,通过对待监控进程的堆数据的内存镜像文件进行解析处理,可以得到其中的对象信息和对象引用关系,从而可以从中分析出可疑对象以及可疑对象的对象引用链。这里,可疑对象可以是大小超过预定阈值的对象。
优选地,基于对象信息确定可疑对象的步骤可以包括:确定尺寸最大的一个或多个对象为可疑对象;或者确定尺寸大于第一预定阈值的对象为可疑对象。
由于导致OOM错误的对象一般是尺寸较大的对象,因此,可以将尺寸较大的一个或多个对象作为可疑对象。
优选地,解析内存镜像文件的步骤可以包括:通过拓扑排序算法计算对象支配树,以得到对象引用关系。
优选地,在解析内存镜像文件的步骤中,可以只获取尺寸大于第二预定阈值的预定类型对象的对象信息和对象引用关系,第二预定阈值小于或等于第一预定阈值。
由此,可以获取内存镜像文件中部分对象信息和对象引用关系,这样,可以减小工作量,提高内存分析效率。
优选地,该内存分析方法还可以包括:将可疑对象的对象引用链上传到服务器。
优选地,该内存分析方法还可以包括:由服务器对可疑对象的对象引用链进行反混淆处理。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于阿里巴巴(中国)有限公司,未经阿里巴巴(中国)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201610906023.8/2.html,转载请声明来源钻瓜专利网。