CN107967205B - 一种内存分析方法、装置、***以及计算设备 - Google Patents

一种内存分析方法、装置、***以及计算设备 Download PDF

Info

Publication number
CN107967205B
CN107967205B CN201610906023.8A CN201610906023A CN107967205B CN 107967205 B CN107967205 B CN 107967205B CN 201610906023 A CN201610906023 A CN 201610906023A CN 107967205 B CN107967205 B CN 107967205B
Authority
CN
China
Prior art keywords
memory
mirror image
image analysis
analysis processing
memory mirror
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201610906023.8A
Other languages
English (en)
Other versions
CN107967205A (zh
Inventor
韩进巍
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba China Co Ltd
Original Assignee
Alibaba China Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba China Co Ltd filed Critical Alibaba China Co Ltd
Priority to CN201610906023.8A priority Critical patent/CN107967205B/zh
Priority to PCT/CN2017/080261 priority patent/WO2018072408A1/zh
Publication of CN107967205A publication Critical patent/CN107967205A/zh
Application granted granted Critical
Publication of CN107967205B publication Critical patent/CN107967205B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种内存分析方法、装置、***以及计算设备。其中,通过获取待监控进程的堆数据的内存镜像文件,解析内存镜像文件,以获取预定类型对象的对象信息和对象引用关系,然后基于对象信息确定可疑对象,基于对象引用关系生成可疑对象的对象引用链。由此,针对Java程序的堆占用过大问题,本发明按照长尾理论和实际情况,把分析重点放在大对象上面(例如很长的byte数组),将大对象列为可疑对象,通过获取进程的堆数据中的可疑对象以及可疑对象的引用链,可以找出导致Java程序的堆占用过大问题的原因所在。

Description

一种内存分析方法、装置、***以及计算设备
技术领域
本发明涉及计算机技术领域,具体涉及一种内存分析方法、装置、***以及计算设备。
背景技术
在应用开发中,当JVM(Java程序运行所在的虚拟机)因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出OOM(out of memory)错误。
在Java程序中,由于存在了垃圾自动回收机制,所以,一般不用去主动释放不用的对象所占的内存,也就是从理论上来说,是不会存在OOM错误的。但是,如果编码不当,比如,将某个对象的引用放到了全局的Map中,虽然方法结束了,但是由于垃圾回收器会根据对象的引用情况来回收内存,导致该对象不能被及时的回收,使得该对象持续占据内存,容易导致内存不足,进而引发OOM。例如,对于图片缓存,图片往往能够达到10MB以上,而堆空间一般只有200MB,如果图片被展现后没有解除引用关系并回收,那么该图片就会一直占据内存。
因此,在出现OOM错误时,我们希望知道在这个时间点上,到底什么对象占据了该JVM的堆,而现在我们无法准确的获知堆内存消耗异常时刻的对象分布情况。另外,如果在进程的堆内存消耗异常时,我们能够有效地确定此时堆内存中的异常对象的分布情况,也可以有效地避免OOM错误的发生。
由此,需要一种能够有效确定堆内存消耗异常时刻的异常对象的分布情况的内存分析方案。
发明内容
本发明主要解决的技术问题是提供一种内存分析方法、装置、***以及计算设备,其能够有效地确定堆内存消耗异常时刻的对象分布情况。
根据本发明的一个方面,提供了一种内存分析方法,包括内存镜像解析处理,内存镜像解析处理包括:获取待监控进程的堆数据的内存镜像文件;解析内存镜像文件,以获取预定类型对象的对象信息和对象引用关系;以及基于对象信息确定可疑对象;以及基于对象引用关系生成可疑对象的对象引用链。
由此,通过对待监控进程的堆数据的内存镜像文件进行解析处理,可以得到其中的对象信息和对象引用关系,从而可以从中分析出可疑对象以及可疑对象的对象引用链。这里,可疑对象可以是大小超过预定阈值的对象。
优选地,基于对象信息确定可疑对象的步骤可以包括:确定尺寸最大的一个或多个对象为可疑对象;或者确定尺寸大于第一预定阈值的对象为可疑对象。
由于导致OOM错误的对象一般是尺寸较大的对象,因此,可以将尺寸较大的一个或多个对象作为可疑对象。
优选地,解析内存镜像文件的步骤可以包括:通过拓扑排序算法计算对象支配树,以得到对象引用关系。
优选地,在解析内存镜像文件的步骤中,可以只获取尺寸大于第二预定阈值的预定类型对象的对象信息和对象引用关系,第二预定阈值小于或等于第一预定阈值。
由此,可以获取内存镜像文件中部分对象信息和对象引用关系,这样,可以减小工作量,提高内存分析效率。
优选地,该内存分析方法还可以包括:将可疑对象的对象引用链上传到服务器。
优选地,该内存分析方法还可以包括:由服务器对可疑对象的对象引用链进行反混淆处理。
优选地,在用于执行待监控进程的设备当前处于锁屏状态的情况下,执行内存镜像解析处理;并且/或者在待监控进程处于后台运行状态的情况下,执行内存镜像解析处理;并且/或者在待监控进程为灰度版本的情况下,执行内存镜像解析处理;并且/或者在用于执行待监控进程的设备属于目标机型的情况下,执行内存镜像解析处理;并且/或者在待监控进程的堆数据的尺寸超过第三预定阈值的情况下,执行内存镜像解析处理;并且/或者在距上次执行内存镜像解析处理超过预定时间阈值的情况下,执行内存镜像解析处理。
由此,本发明的内存分析方法可以用在执行一个或多个进程的终端设备上,在执行内存分析方法中的内存镜像解析处理之前,还可以判断当前设备是否符合预定的条件,在符合预定的条件的情况下,再执行内存镜像解析处理。
根据本发明的另一个方面,还提供了一种内存分析装置,包括内存镜像解析处理模块,内存镜像解析处理模块包括:获取单元,用于获取待监控进程的堆数据的内存镜像文件;解析单元,用于解析内存镜像文件,以获取预定类型对象的对象信息和对象引用关系;可疑对象确定单元,用于基于对象信息确定可疑对象;对象引用链生成单元,基于对象引用关系生成可疑对象的对象引用链。
优选地,解析单元可以通过拓扑排序算法计算对象支配树,以得到对象引用关系。
优选地,该内存分析装置还可以包括:上传单元,用于将可疑对象的对象引用链上传到服务器。
优选地,在用于执行待监控进程的设备当前处于锁屏状态的情况下,内存镜像解析处理模块执行内存镜像解析处理;并且/或者在待监控进程处于后台运行状态的情况下,内存镜像解析处理模块执行内存镜像解析处理;并且/或者在待监控进程为灰度版本的情况下,内存镜像解析处理模块执行内存镜像解析处理;并且/或者在用于执行待监控进程的设备属于目标机型的情况下,内存镜像解析处理模块执行内存镜像解析处理;并且/或者在待监控进程的堆数据的尺寸超过第三预定阈值的情况下,内存镜像解析处理模块执行内存镜像解析处理;并且/或者在距上次执行内存镜像解析处理超过预定时间阈值的情况下,内存镜像解析处理模块执行内存镜像解析处理。
根据本发明的另一个方面,还提供了一种计算设备,适于执行一种或多种进程,该计算设备包括:内存,用于存储一种或多种进程所对应的堆数据;以及处理器,用于获取待监控进程的堆数据的内存镜像文件,解析内存镜像文件,以获取预定类型对象的对象信息和对象引用关系,基于对象信息确定可疑对象,并基于对象引用关系生成可疑对象的对象引用链。
优选地,该计算设备还可以包括:通信装置,用于将可疑对象的对象引用链上传到服务器。
根据本发明的另一个方面,还提供了一种内存分析***,包括:上文述及的计算设备;以及服务器,用于对所述可疑对象的对象引用链进行反混淆处理。
综上,针对Java程序的堆占用过大问题,本发明按照长尾理论和实际情况,把分析重点放在大对象上面(例如很长的byte数组),将大对象列为可疑对象,通过获取进程的堆数据中的可疑对象以及可疑对象的引用链,可以找出导致Java程序的堆占用过大问题的原因所在。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示出了根据本发明一实施例的内存分析装置的结构的示意性方框图。
图2示出了根据本发明一实施例的内存分析方法的示意性流程图。
图3示出了根据本发明另一实施例的内存分析方法的示意性流程图。
图4示出了根据本发明一实施例的计算设备的结构的示意性方框图。
图5示出了根据本发明一实施例的内存分析***的结构的示意性方框图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
在描述本发明之前,首先对本发明涉及的几个概念做以简要说明。
内存镜像:进程的堆信息。
Hprof文件:获取的内存镜像的文件,Hprof为文件名后缀。
JVM:Java程序运行所在的虚拟机。
OOM:Java语言中的Out Of Memory Error,因为堆的空间被耗尽,导致程序无法再申请到对象所需的内存,导致的崩溃。
如前文所述,针对OOM错误,本发明提供了一种能确定JVM的堆数据中的异常对象及异常对象的引用关系的内存分析方案,基于本发明的方案,可以清楚地了解到可能导致OOM错误的可疑对象的分布情况。
图1示出了根据本发明一实施例的内存分析装置的结构的示意性方框图。
图2示出了根据本发明一实施例的内存分析方法的示意性流程图。
参见图1,本实施例的内存分析装置包括内存镜像解析处理模块100。内存镜像解析处理模块100包括获取单元110、解析单元120、可疑对象确定单元130以及对象引用链生成单元140。
参见图2,本实施例的内存分析方法包括内存镜像解析处理200,内存镜像解析处理200可以由内存镜像解析处理模块100实现。其中,内存镜像解析处理200的全部步骤或大部分步骤可以在运行待监控进程的终端设备上进行,这里的终端设备可以是安卓设备,也可以是其它设备。
在执行内存镜像解析处理200之前,可以扩大分配给用于执行内存镜像解析处理200的进程(可以称为Hprof进程)的堆内存的最大值。这样,可以避免在执行内存镜像解析处理200的过程中因内存不足而导致不能正常执行的情况发生。
另外,在执行内存镜像解析处理200之前,还可以判断内存镜像解析处理200所对应的Intent的合理性。例如,可以根据Intent的描述,找到对应的组件,并将Intent传递给调用的组件,并完成组件的调用。
下面结合图1、图2详细说明内存镜像解析处理200的实现过程。
在步骤S210,例如可以由获取单元110,获取待监控进程的堆数据的内存镜像文件。
这里根据运行待监控进程的设备和具体情况,可以选取相应的方式来获取内存镜文件。
例如,可以使用可seek寻址,position递进的文件读取接口读取内存镜像文件。具体来说,可以使用***接口Debug.dumpHprofData()获取内存镜像的hprof文件,然后可以将hprof文件解析出来,这里可以主要解析出结构化的GCRoot/ArrayInstance/Class/ClassObject/Thread等类型的对象信息,并可以将其保存在Map或Collection里面。
其中,在执行步骤S210之前或执行步骤S210的过程中,可以锁定待监控进程的堆数据,使得待监控进程无法对堆数据进行操作。这样,可以防止在执行本发明的分析方案的过程中堆数据被修改(这里的修改可以是堆数据本身的修改,也可以是引用关系的修改)。
在步骤S220,例如可以由解析单元120,解析内存镜像文件,以获取预定类型对象的对象信息和对象引用关系。
由于导致OOM错误的对象一般是大对象,因此这里可以优选地将尺寸能够大于第一预定阈值的类型对象作为预定类型对象,然后获取预定类型对象的对象信息和对象引用关系。例如,预定类型对象可以是图片(Bitmap)、byte[]等可能会具有较大尺寸的类型对象。
其中,可以通过拓扑排序算法计算对象支配树,来得到对象引用关系。这里,可以从GC ROOT(内存回收根节点)出发,建立所有对象的树形依赖引用关系(即对象支配树)。在建立对象的对象支配树时,可以在不计算retained size的情况下计算对象的树形依赖引用关系,也就是说在计算对象的对象支配树时,可以仅计算对象本身所占用的空间(shallow size)。其中,retained size是该对象自己的尺寸(即shallow size),加上从该对象能直接或间接访问到对象的的shallow size之和。换句话说,retained size是该对象被GC(垃圾回收)之后所能回收到内存的总和。shallow size就是对象本身占用内存的大小,不包含其引用的对象。
在步骤S230,例如可以由可疑对象确定单元130,基于对象信息确定可疑对象。
在获取了对象信息后,可以将尺寸较大的对象信息认为是可疑对象。这里可以确定尺寸最大的一个或多个对象为可疑对象,或者,也可以确定尺寸大于第一预定阈值的对象为可疑对象。例如,可以将第一预定阈值设为20M,然后可以将尺寸大于20M的对象确定为可疑对象。
其中,对于上文在步骤S220中述及的解析内存镜像文件的步骤,可以只获取尺寸大于第二预定阈值的预定类型对象的对象信息和对象引用关系,这里,第二预定阈值小于或等于第一预定阈值。例如,第二预定阈值可以设定为1M,第一预定阈值可以设定为10M。
在步骤S240,例如可以由对象引用链生成单元140,基于对象引用关系生成可疑对象的对象引用链。
根据所确定的可疑对象以及对象引用关系,可以得出可疑对象的对象引用链。
对于得出的可疑对象和/或可疑对象引用链,可以将其上传到服务器(这里,可以将可疑对象引用链转化为JSON字符串(也可以是文本文件),然后通过相关组件(例如,可以是CrashSDK)上传给服务器),由服务器进行展示指出实际运行中的可疑对象,以供服务器端的相关人员根据所展示的可疑对象以及可疑对象的引用关系做进一步处理。
由于内存镜像里面所包含的类名字符串是被混淆处理后的(例如MainUIControllor的类名被混淆处理后变为a),并且不同版本的待监控进程的内存镜像文件不一样。因此,服务器在接收到可疑对象和/或可疑对象引用链后,可以由服务器对可疑对象和/或可疑对象引用链进行反混淆处理。
其中,上报给服务器的异常对象的对象引用链文件可以是如下形式。
Max JVM Heap:134217728
Device Screen Width&Height:1080,1920
Device Manufacturer:Xiaomi
IMEI:866963021720281
Hprof file size is:72635717bytes
The reference chain of objects,which are big enough for ourattention.(byte[]&&char[]only..)
Chain 0:
[TerminalNode]Class:byte[],SIZE:980640
[ReferenceNode]Class:android.graphics.Bitmap,SIZE:47
[ReferenceNode]Class:android.graphics.drawable.BitmapDrawable$BitmapState,SIZE:54
[ReferenceNode]Class:android.graphics.drawable.BitmapDrawable,SIZE:68
[ReferenceNode]Class:com.uc.browser.core.homepage.weather.view.WeatherWidgetEx,SIZE:892
[GCRootNode]Class:default,SIZE:165
Chain 1:
[TerminalNode]Class:byte[],SIZE:26645760
[ReferenceNode]Class:android.graphics.Bitmap,SIZE:47
[ReferenceNode]Class:com.uc.browser.advertisement.afp.model.data.AFPMedia,SIZE:40
[ReferenceNode]Class:com.uc.browser.advertisement.afp.model.data.AFPCreative,SIZE:56
[ReferenceNode]Class:com.uc.browser.splashscreen.SplashHCAdHelper,SIZE:17
[GCRootNode]Class:default,SIZE:144
如上所示,Chain 1表明某个广告闪屏的图片占用了25MB+,属于异常对象。此时,服务器端的相关人员就可以根据该图片的引用关系对相关代码进行分析、调试。
综上,针对Java程序的堆占用过大问题,本发明按照长尾理论和实际情况,把分析重点放在大对象上面(例如很长的byte数组),将大对象列为可疑对象,通过获取进程的堆数据中的可疑对象以及可疑对象的引用链,可以找出导致Java程序的堆占用过大问题的原因所在。
例如,我们可以首先找到尺寸超过20MB的图片,然后确定图片的对象引用链,比如我们如果知道了是主界面的UIControllor类持有了一个Dialog对话框类,这个对话框又持有了这个20MB的图片,由此就找到了问题所在。开发人员可以通过调整相应代码,从而解决Java程序的堆占用过大问题,这样,可以避免OOM错误的产生。或者,在产生OOM错误时,利用本发明也可以有效地解决OOM错误。
图3示出了根据本发明另一实施例的内存分析方法的流程图。
如图3所示,在执行步骤S370之前,可以可选地执行多个判断步骤(步骤S310-步骤S360)。其中,可以在终端设备(可以是安卓终端,也可以是其它终端)上执行图3所示的所有步骤,也可以执行图3所示的一个或多个判断步骤,并且图3所示的多个判断步骤之间的执行顺序对本发明并无实质性影响。
参见图3,在步骤S310,可以定期发出询问,以触发后续的判断步骤。这里,还可以设定一个轮询的触发条件,例如,可以在终端设备切换至后台超过5秒开始计时,然后超过5分钟进行一次轮询。
在步骤S320,判断终端设备是否是锁屏状态或后台运行状态,在判定为是的情况下,可以继续执行下一个判断步骤,或者也可以直接执行步骤S370。在判定结果为否的情况下,可以返回步骤S310。
在步骤S330,判断待监控进程是否为灰度版本,在判定为是的情况下,可以继续执行下一个判断步骤,或者也可以直接执行步骤S370。在判定结果为否的情况下,可以返回步骤S310。
在步骤S340,判断用于执行待监控进程的终端设备是否属于目标机型,在判定为是的情况下,可以继续执行下一个判断步骤,或者也可以直接执行步骤S370。在判定结果为否的情况下,可以返回步骤S310。
在步骤S350,判断待监控进程的堆数据的尺寸是否超过对应阈值,在判定超过的情况下,可以继续执行下一个判断步骤,或者也可以直接执行步骤S370。在判定结果为否的情况下,可以返回步骤S310。
在步骤S360,判断距上次执行内存镜像解析处理(即步骤S370)是否超过预定时间阈值,在判定超过的情况下,可以执行本次内存镜像解析处理。在判定未超过的情况下,可以返回步骤S310。这样,可以防止短时间内(例如几天内)做多次内存镜像解析处理。
在步骤S370,执行内存镜像解析处理。
其中,内存镜像解析处理的过程可以参见上文相关描述,这里不再赘述。需要说明的是,在每次执行内存镜像解析处理时可以用一个文件做标记flag,这样可以便于步骤S360的执行。
图4示出了根据本发明一实施例的计算设备的结构的示意性方框图。
参见图4,本实施例的计算设备400包括内存410和处理器420。其中,计算设备400适于执行一种或多种进程。这里,计算设备400可以是手机、IPAD等移动终端设备。
内存410用于存储计算设备400所执行的一种或多种进程所对应的堆数据。
处理器420用于获取待监控进程的堆数据的内存镜像文件,解析内存镜像文件,以获取预定类型对象的对象信息和对象引用关系,基于对象信息确定可疑对象,并基于对象引用关系生成可疑对象的对象引用链。
参见图4,本实施例的计算设备400还可以可选地包括通信装置430,通信装置430可以将可疑对象的对象引用链上传到服务器。
其中,本实施例涉及的内容在上文结合图1-图4已做了详细说明,可参上文相关描述,另外,本实施例的计算设备400还可以通过处理器420实现在上文结合图1-图4述及的而在这里没有提及的方案,此处不再赘述。
图5示出了根据本发明一实施例的内存分析***的结构的示意性方框图。
参见图5,本实施例的内存分析***500包括计算设备400和服务器510。
其中,计算设备400可参见图5的描述,这里不再赘述。
服务器510可以接收计算设备400上传的可疑对象的对象引用链,并可以对可疑对象的对象引用链进行反混淆处理。
上文中已经参考附图详细描述了根据本发明的内存分析方法、装置、***以及计算设备。
此外,根据本发明的方法还可以实现为一种计算机程序,该计算机程序包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。或者,根据本发明的方法还可以实现为一种计算机程序产品,该计算机程序产品包括计算机可读介质,在该计算机可读介质上存储有用于执行本发明的上述方法中限定的上述功能的计算机程序。本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的***和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

Claims (12)

1.一种计算设备,适于执行一种或多种进程,该计算设备包括:
内存,用于存储所述一种或多种进程所对应的堆数据;以及
处理器,用于获取待监控进程的堆数据的内存镜像文件,解析所述内存镜像文件,以获取其中预定类型对象的对象信息和对象引用关系,其中,只获取尺寸大于第二预定阈值的预定类型对象的对象信息和对象引用关系,将尺寸最大的一个或多个对象或者尺寸大于第一预定阈值的对象确定为可能导致OOM错误的可疑对象,并基于所述对象引用关系生成所述可疑对象的对象引用链,其中,所述第二预定阈值小于或等于第一预定阈值。
2.根据权利要求1所述的计算设备,还包括:
通信装置,用于将所述可疑对象的对象引用链上传到服务器。
3.一种内存分析***,包括:
根据权利要求1或2所述的计算设备;以及
服务器,用于对所述可疑对象的对象引用链进行反混淆处理。
4.一种内存分析装置,包括内存镜像解析处理模块,所述内存镜像解析处理模块包括:
获取单元,用于获取待监控进程的堆数据的内存镜像文件;
解析单元,用于解析所述内存镜像文件,以获取其中预定类型对象的对象信息和对象引用关系,其中,只获取尺寸大于第二预定阈值的预定类型对象的对象信息和对象引用关系;
可疑对象确定单元,用于将尺寸最大的一个或多个对象或者尺寸大于第一预定阈值的对象确定为可能导致OOM错误的可疑对象,其中,所述第二预定阈值小于或等于第一预定阈值;
对象引用链生成单元,基于所述对象引用关系生成所述可疑对象的对象引用链。
5.根据权利要求4所述的内存分析装置,其中,所述解析单元通过拓扑排序算法计算对象支配树,以得到所述对象引用关系。
6.根据权利要求4所述的内存分析装置,还包括:
上传单元,用于将所述可疑对象的对象引用链上传到服务器。
7.根据权利要求4所述的内存分析装置,其中,
在用于执行所述待监控进程的设备当前处于锁屏状态的情况下,所述内存镜像解析处理模块执行所述内存镜像解析处理;并且/或者
在所述待监控进程处于后台运行状态的情况下,所述内存镜像解析处理模块执行所述内存镜像解析处理;并且/或者
在所述待监控进程为灰度版本的情况下,所述内存镜像解析处理模块执行所述内存镜像解析处理;并且/或者
在用于执行所述待监控进程的设备属于目标机型的情况下,所述内存镜像解析处理模块执行所述内存镜像解析处理;并且/或者
在所述待监控进程的堆数据的尺寸超过第三预定阈值的情况下,所述内存镜像解析处理模块执行所述内存镜像解析处理;并且/或者
在距上次执行所述内存镜像解析处理超过预定时间阈值的情况下,所述内存镜像解析处理模块执行所述内存镜像解析处理。
8.一种内存分析方法,包括内存镜像解析处理,所述内存镜像解析处理包括:
获取待监控进程的堆数据的内存镜像文件;
解析所述内存镜像文件,以获取其中预定类型对象的对象信息和对象引用关系,其中,只获取尺寸大于第二预定阈值的预定类型对象的对象信息和对象引用关系;
将尺寸最大的一个或多个对象或者尺寸大于第一预定阈值的对象确定为可能导致OOM错误的可疑对象,其中,所述第二预定阈值小于或等于第一预定阈值;以及
基于所述对象引用关系生成所述可疑对象的对象引用链。
9.根据权利要求8所述的内存分析方法,其中,解析所述内存镜像文件的步骤包括:
通过拓扑排序算法计算对象支配树,以得到所述对象引用关系。
10.根据权利要求8所述的内存分析方法,还包括:
将所述可疑对象的对象引用链上传到服务器。
11.根据权利要求10所述的内存分析方法,还包括:
由所述服务器对所述可疑对象的对象引用链进行反混淆处理。
12.根据权利要求8所述的内存分析方法,其中,
在用于执行所述待监控进程的设备当前处于锁屏状态的情况下,执行所述内存镜像解析处理;并且/或者
在所述待监控进程处于后台运行状态的情况下,执行所述内存镜像解析处理;并且/或者
在所述待监控进程为灰度版本的情况下,执行所述内存镜像解析处理;并且/或者
在用于执行所述待监控进程的设备属于目标机型的情况下,执行所述内存镜像解析处理;并且/或者
在所述待监控进程的堆数据的尺寸超过第三预定阈值的情况下,执行所述内存镜像解析处理;并且/或者
在距上次执行所述内存镜像解析处理超过预定时间阈值的情况下,执行所述内存镜像解析处理。
CN201610906023.8A 2016-10-18 2016-10-18 一种内存分析方法、装置、***以及计算设备 Active CN107967205B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201610906023.8A CN107967205B (zh) 2016-10-18 2016-10-18 一种内存分析方法、装置、***以及计算设备
PCT/CN2017/080261 WO2018072408A1 (zh) 2016-10-18 2017-04-12 一种内存分析方法、装置、***以及计算设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610906023.8A CN107967205B (zh) 2016-10-18 2016-10-18 一种内存分析方法、装置、***以及计算设备

Publications (2)

Publication Number Publication Date
CN107967205A CN107967205A (zh) 2018-04-27
CN107967205B true CN107967205B (zh) 2020-12-29

Family

ID=61996825

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610906023.8A Active CN107967205B (zh) 2016-10-18 2016-10-18 一种内存分析方法、装置、***以及计算设备

Country Status (2)

Country Link
CN (1) CN107967205B (zh)
WO (1) WO2018072408A1 (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110543358A (zh) * 2018-05-29 2019-12-06 北京京东尚科信息技术有限公司 图片还原方法和装置
CN109189374B (zh) * 2018-06-22 2020-08-28 北京大学 基于对象引用链的对象构造代码生成方法及***
CN109408383B (zh) * 2018-10-12 2023-04-14 北京宝兰德软件股份有限公司 一种Java内存泄漏分析方法及装置
CN109558297A (zh) * 2018-11-27 2019-04-02 苏州思必驰信息科技有限公司 内存管理方法及装置
CN111274082B (zh) * 2020-01-13 2023-04-18 北京字节跳动网络技术有限公司 一种内存性能的分析方法、装置、介质和电子设备
CN111858339B (zh) * 2020-07-22 2023-11-28 腾讯科技(成都)有限公司 内存分析方法、设备和***以及计算设备、计算机可读存储介质
CN111858068A (zh) * 2020-07-31 2020-10-30 重庆紫光华山智安科技有限公司 一种Java程序性能问题定位方法及装置
CN112181830B (zh) * 2020-09-28 2022-08-09 厦门美柚股份有限公司 内存泄露的检测方法、装置、终端及介质
CN112711629B (zh) * 2020-12-30 2022-10-21 浙江中控技术股份有限公司 数据及关联数据导入导出方法、装置、设备及存储介质
CN112835813A (zh) * 2021-03-04 2021-05-25 腾讯音乐娱乐科技(深圳)有限公司 处理内存中重复图片的方法、电子设备及存储介质
CN113094178A (zh) * 2021-04-23 2021-07-09 北京字节跳动网络技术有限公司 内存镜像文件生成方法、装置、电子设备和存储介质
CN113391882B (zh) * 2021-06-28 2023-12-22 北京字节跳动网络技术有限公司 虚拟机内存管理方法、装置、存储介质及电子设备
CN114090965B (zh) * 2021-11-22 2024-05-17 全景智联(武汉)科技有限公司 java代码混淆方法、***、计算机设备及存储介质
CN114546590B (zh) * 2022-02-18 2023-03-14 北京基调网络股份有限公司 Java虚拟机堆内存集合对象监测方法及内存溢出分析方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1221912A (zh) * 1997-12-09 1999-07-07 太阳微***有限公司 用于发现内存泄漏和运行期信息的对象堆分析技术
CN101046755A (zh) * 2006-03-28 2007-10-03 郭明南 一种计算机自动内存管理的***及方法
CN101493767A (zh) * 2009-01-20 2009-07-29 中国科学技术大学 一种即时编译器辅助的垃圾收集中显式释放对象的插桩方法
CN103425532A (zh) * 2013-08-27 2013-12-04 北京京东尚科信息技术有限公司 一种java无状态对象的管理方法和装置
CN104808985A (zh) * 2015-04-02 2015-07-29 小米科技有限责任公司 应用程序中对象的管理方法及装置
CN104866764A (zh) * 2015-06-02 2015-08-26 哈尔滨工业大学 一种基于对象引用图的Android手机恶意软件检测方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1221912A (zh) * 1997-12-09 1999-07-07 太阳微***有限公司 用于发现内存泄漏和运行期信息的对象堆分析技术
CN101046755A (zh) * 2006-03-28 2007-10-03 郭明南 一种计算机自动内存管理的***及方法
CN101493767A (zh) * 2009-01-20 2009-07-29 中国科学技术大学 一种即时编译器辅助的垃圾收集中显式释放对象的插桩方法
CN103425532A (zh) * 2013-08-27 2013-12-04 北京京东尚科信息技术有限公司 一种java无状态对象的管理方法和装置
CN104808985A (zh) * 2015-04-02 2015-07-29 小米科技有限责任公司 应用程序中对象的管理方法及装置
CN104866764A (zh) * 2015-06-02 2015-08-26 哈尔滨工业大学 一种基于对象引用图的Android手机恶意软件检测方法

Also Published As

Publication number Publication date
WO2018072408A1 (zh) 2018-04-26
CN107967205A (zh) 2018-04-27

Similar Documents

Publication Publication Date Title
CN107967205B (zh) 一种内存分析方法、装置、***以及计算设备
CN104735112A (zh) 发送资源文件的方法、缓存资源文件的方法和装置
CN106980533B (zh) 基于异构处理器的任务调度方法、装置及电子设备
CN110716848A (zh) 数据收集方法、装置、电子设备及存储介质
US10324784B2 (en) Mitigating crashes of an application server executing a monitoring agent
CN113296786B (zh) 数据处理方法、装置、电子设备及存储介质
CN113568841A (zh) 一种针对小程序的风险检测方法、装置及设备
CN110597694A (zh) 一种监控前端页面的方法及终端
CN113656107A (zh) 移动应用的加载方法、装置及电子设备
CN116523457A (zh) 基于业务流程的工作流处理方法、装置、设备及存储介质
CN111124470A (zh) 基于云平台的程序包自动优化方法及装置
CN112328602B (zh) 一种数据写入Kafka的方法、装置及设备
CN107256167B (zh) 应用于应用***迁移的升级控制方法及升级控制设备
CN113254350A (zh) 一种Flink作业测试方法、装置、设备及存储介质
CN111414308B (zh) 应用程序包的处理方法和应用程序的运行方法、装置
CN110231921B (zh) 日志打印方法、装置、设备及计算机可读存储介质
CN110990179A (zh) 一种任务处理方法、装置及设备
CN114281628A (zh) 一种***故障检测方法、装置、电子设备及存储介质
CN111240956A (zh) 内存泄漏监测方法、装置、电子设备及计算机存储介质
CN111193617A (zh) 网页篡改识别方法、装置、电子设备及存储介质
CN111833232A (zh) 一种图像处理装置
CN114690988B (zh) 测试方法、装置和电子设备
CN116450250B (zh) 一种动态脚本执行方法、***及存储介质
CN116009996A (zh) 一种批量生成数据的方法、装置、设备及存储介质
CN117472370A (zh) 图标管理方法、装置、计算机设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20200709

Address after: 310052 room 508, floor 5, building 4, No. 699, Wangshang Road, Changhe street, Binjiang District, Hangzhou City, Zhejiang Province

Applicant after: Alibaba (China) Co.,Ltd.

Address before: 510627 Guangdong city of Guangzhou province Whampoa Tianhe District Road No. 163 Xiping Yun Lu Yun Ping B radio square 14 storey tower

Applicant before: GUANGZHOU UCWEB COMPUTER TECHNOLOGY Co.,Ltd.

GR01 Patent grant
GR01 Patent grant