CN103714004A - Jvm在线内存泄露分析方法及系统 - Google Patents
Jvm在线内存泄露分析方法及系统 Download PDFInfo
- Publication number
- CN103714004A CN103714004A CN201410002172.2A CN201410002172A CN103714004A CN 103714004 A CN103714004 A CN 103714004A CN 201410002172 A CN201410002172 A CN 201410002172A CN 103714004 A CN103714004 A CN 103714004A
- Authority
- CN
- China
- Prior art keywords
- tree
- adduction relationship
- jvm
- ram leakage
- online
- 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.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种JVM在线内存泄露分析方法及系统,所述方法包括以下步骤:获取引用关系树中各节点信息,所述节点信息包括对象的数量及节点占用空间的大小;在预定时间后重新获取所述引用关系树中各节点信息,并根据两次获取的节点信息构建相应的引用关系变化树;根据所述引用关系变化树在线分析JVM内存泄露。本发明的一种JVM在线内存泄露分析方法及系统能精确地在线分析JVM内存泄露情况。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种JVM在线内存泄露分析方法以及一种JVM在线内存泄露分析系统。
背景技术
JVM(Java Virtual Machine,Java虚拟机)运行过程中,经常出现内存泄露情况。传统的内存泄露分析方法通常为:在发生OOM(Out Of Memory,内存溢出)或者手动dump之后,通过分析dump文件来分析内存泄露情况。
另外,JVM运行过程中,可以借助Visualvm、JProfile监控java虚拟机内存中的引用关系树个数、大小等,能粗略在线获知JVM内存溢出的信息。但这些信息过于笼统,无法精确监控分析虚拟机内的对象及其变化情况。
发明内容
基于此,本发明提供一种JVM在线内存泄露分析方法及系统,能精确的分析出JVM内存泄露的情况。
为实现上述目的,本发明采用如下的技术方案:
一种JVM在线内存泄露分析方法,包括以下步骤:
获取引用关系树中各节点信息,所述节点信息包括对象的数量及节点占用空间的大小;
在预定时间后重新获取所述引用关系树中各节点信息,并根据两次获取的节点信息构建相应的引用关系变化树;
根据所述引用关系变化树在线分析JVM内存泄露。
一种JVM在线内存泄露分析系统,包括:
获取模块,用于获取引用关系树中各节点信息,所述节点信息包括对象的数量及节点占用空间的大小;
构建模块,用于在预定时间后重新获取所述引用关系树中各节点信息,并根据两次获取的节点信息构建引用关系变化树;
分析模块,用于根据所述引用关系变化树在线分析JVM内存泄露。
综上所述,本发明的一种JVM在线内存泄露分析方法及系统,通过分别获取预定时间前后的引用关系书中各节点信息,根据两次获取的节点信息构建相应的引用关系变化树,并根据该引用关系变化树进行在线分析内存的泄露情况。本发明的方案通过引用关系变化树可以在各个时间段内在线分析JVM内存泄露的情况,因此不仅能在开发初期精确地在线分析JVM是否存在内存泄露,并且还能在发生OOM前发出预警并初步查找问题。
附图说明
图1为本发明实施例中的一种JVM在线内存泄露分析方法的流程示意图;
图2为本发明实施例中的基准引用关系树的示意图;
图3为本发明实施例中的变化后的引用关系树的示意图;
图4为本发明实施例中的引用关系变化树的示意图;
图5为本发明实施例中的一种JVM在线内存泄露分析系统示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参见图1所示,一种JVM在线内存泄露分析方法,包括以下步骤:
步骤S101,获取引用关系树中各节点信息,所述节点信息包括对象的数量及节点占用空间的大小。此步骤中获取的引用关系树可为对象的基准引用关系树,并初始化对该应用关系树。获取一次对象引用关系树的过程和一次full GC类似。结合参见图2所示从,GC Root开始向下搜索,建立引用关系树,在一个引用关系节点中,如果有相同累的多个对象,用数字标示对象个数,并记录该节点节点占用空间的总大小。在建立引用关系过程中,递归引用不记录,由于所以的对象都会引用java.lang.Class,故也不需要记录到引用关系中。如图2中所示的标示为Object B(2,258)的节点,表示类B的实例对象有两个,占用总内存空间为258。
步骤S102,在预定时间后重新获取所述引用关系树中各节点信息,并根据两次获取的节点信息构建相应的引用关系变化树。在设定的时间间隔后或者在用户操作触发下(如用户查看),重新获取所述引用关系树,此时的引用关系树相对基准引用关系树已经发生了变化。经过分析已经变化的引用关系树,并和步骤S101中获取的引用关系树进行比较计算,根据计算的结果获得引用关系变化树。将已经变化的引用关系树丢弃,并保存引用关系变化树。
步骤S103,根据所述引用关系变化树在线分析JVM内存泄露。
作为一个较好的实施例,所述根据两次获取的节点信息构建引用关系变化树的过程具体可以包括以下步骤:
步骤S1021,将在预定时间后重新获取所述引用关系树减与间隔预定时间前获取的引用关系树进行计算。如在构建引用关系变化树时,由已经变化的引用关系树减去基准引用关系树产生。所述引用关系变化树也由根节点出发,到新增叶子节点为止。
步骤S1022,根据计算结果获取各节点信息的变化信息。例如在两个引用关系树对比中节点无变化但有新增子节点时,引用关系变化中记录该变化信息,例如可以将对象节点个数和占用空间均为0。如图2所示引用关系树在一定时间间隔后变化为图3引用关系树。且两个引用关系树中节点Object A新增引用对象object D、根节点新增引用对象Object B、其引用对象Object E。
步骤S1023,根据所述变化信息构建引用关系变化树。例如可以将上述的新增节点加入引用关系变化树中,节点对象中记录对象变化部分。构建引用关系变化树,将图2与图3所示的引用关系树进行计算后得到的变化信息加入引用关系变化树中。如图4所示,节点Object A无变化但有新增子节点,则引用关系变化中记录该节点Object A(0,0),新增节点Object D、Object E加入树中,而Object B增加一个对象,占用62字节空间,记录Object B(1,62)。
作为一个较好的实施例,根据所述引用关系变化树在线分析JVM内存泄露的过程具体可以包括以下步骤:
对预定时间内的引用关系变化树中各节点进行分析;
根据分析结果获取引用关系树中对象变化趋势图,能实现在线分析对象变化趋势;所述分析结果可以包括引用关系变化树节中各节点的对象数量及占用的空间;
根据所述对象变化趋势图中预定的对象进行在线分析JVM内存泄漏。
由于虚拟机中可能有较多对象变化,所以预定对象可以指用户指定的对象或者变化最多的节点对象。通过对预定对象的变化可以分析这些是否仍需留在虚拟机内存是否由于内存泄露引起,从而实现在线内存泄露分析。
作为一个较好的实施例,根据所述引用关系变化树在线分析内存泄露的过程具体还可以包括以下步骤:
根据所述对象变化趋势图判断是否存在内存泄露;
若是,则说明存在内存泄漏,可以根据变化对象的引用关系查找引用路径与内存泄漏点;否则不存在内存泄漏,则继续对引用关系树进行分析。通过对变化对象的引用关系的分析查看,可定位引用路径和内存泄露点。对持续增加的对象可以预判该点可能发生了内存泄露并最终会导致虚拟机的OOM,提前发出预警。例如,比较图2与图3所示的应用关系树,节点Object B的对象由(2,258)变化成了(3,20),可知Object B的对象增加了一个,占用空间62,总增加空间86(由于B引用的Object E无其它引用,计入B总空间),在此时间间隔内,如对象B无此变化的理由,则可以判定对象B发生了内存泄露,从而定位问题。
与上述实施例中的一种JVM在线内存泄露分析方法相对应,本发明的实施例还提供一种JVM在线内存泄露分析系统,如图5所示,包括:
获取模块101,用于获取引用关系树中各节点信息,所述节点信息包括对象的数量及节点占用空间的大小;
构建模块102,用于在预定时间后重新获取所述引用关系树中各节点信息,并根据两次获取的节点信息构建引用关系变化树;
分析模块103,用于根据所述引用关系变化树在线分析JVM内存泄露。
作为一个较好的实施例,所述构建模块具体可以包括:
计算模块,用于将在预定时间后重新获取所述引用关系树与在间隔预定时间前获取的引用关系树进行计算;
变化信息获取模块,用于根据计算结果获取各节点信息的变化信息;
构建子模块,用于根据所述变化信息构建引用关系变化树。
作为一个较好的实施例,所述分析模块具体还可以包括:
第一分析子模块,用于对预定时间内的引用关系变化树中各节点进行分析;
趋势图获取模块,用于根据分析结果获取各节点中对象变化趋势图;
第二分析子模块,用于根据所述对象变化趋势图中预定的对象进行在线分析JVM内存泄漏。
作为一个较好的实施例,所述分析模块具体还可以包括:
判断模块,用于根据所述对象变化趋势图判断是否存在内存泄露;
查找模块,用于在所述判断模块的判断结果为是时,根据变化对象的引用关系查询引用路径与内存泄漏点。
上述一种JVM在线内存泄露分析系统的其它技术特征与本发明的一种JVM在线内存泄露分析方法相同,此处不予赘述。
通过以上方案可以看出,本发明实施例的一种JVM在线内存泄露分析方法及系统,通过分别获取预定时间前后的引用关系书中各节点信息,根据两次获取的节点信息构建相应的引用关系变化树,并根据该引用关系变化树进行在线分析内存的泄露情况。本发明的方案通过引用关系变化树可以在各个时间段内在线分析JVM内存泄露的情况,因此不仅能在开发初期精确地在线分析JVM是否存在内存泄露,并且还能在发生OOM前发出预警并初步查找问题。
需要说明的是,除非上下文另有特定清楚的描述,本发明中的元件和组件,数量既可以单个的形式存在,也可以多个的形式存在,本发明并不对此进行限定。另外,本发明中的步骤虽然用标号进行了排列,但并不用于限定步骤的先后次序,除非明确说明了步骤的次序或者某步骤的执行需要其他步骤作为基准,否则步骤的相对次序是可以调整的。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (8)
1.一种JVM在线内存泄露分析方法,其特征在于,包括以下步骤:
获取引用关系树中各节点信息,所述节点信息包括对象的数量及节点占用空间的大小;
在预定时间后重新获取所述引用关系树中各节点信息,并根据两次获取的节点信息构建相应的引用关系变化树;
根据所述引用关系变化树在线分析JVM内存泄露。
2.根据权利要求1所述的JVM在线内存泄露分析方法,其特征在于,根据所述引用关系变化树在线分析JVM内存泄露的过程包括以下步骤:
对预定时间内的引用关系变化树中各节点进行分析;
根据分析结果获取引用关系树中对象变化趋势图;
根据所述对象变化趋势图中预定的对象进行在线分析JVM内存泄漏。
3.根据权利要求2所述的JVM在线内存泄露分析方法,其特征在于,根据所述引用关系变化树在线分析内存泄露的过程还包括以下步骤:
根据所述对象变化趋势图判断是否存在内存泄露;
若是,则根据变化对象的引用关系查找引用路径与内存泄漏点。
4.根据权利要求1所述的JVM在线内存泄露分析方法,其特征在于,所述根据两次获取的节点信息构建引用关系变化树的过程包括以下步骤:
将在预定时间后重新获取所述引用关系树减与间隔预定时间前获取的引用关系树进行计算;
根据计算结果获取各节点信息的变化信息;
根据所述变化信息构建引用关系变化树。
5.一种JVM在线内存泄露分析系统,其特征在于,包括:
获取模块,用于获取引用关系树中各节点信息,所述节点信息包括对象的数量及节点占用空间的大小;
构建模块,用于在预定时间后重新获取所述引用关系树中各节点信息,并根据两次获取的节点信息构建引用关系变化树;
分析模块,用于根据所述引用关系变化树在线分析JVM内存泄露。
6.根据权利要求5所述的JVM在线内存泄露分析系统,其特征在于,所述分析模块包括:
第一分析子模块,用于对预定时间内的引用关系变化树中各节点进行分析;
趋势图获取模块,用于根据分析结果获取各节点中对象变化趋势图;
第二分析子模块,用于根据所述对象变化趋势图中预定的对象进行在线分析JVM内存泄漏。
7.根据权利要求6所述的JVM在线内存泄露分析系统,其特征在于,所述分析模块还包括:
判断模块,用于根据所述对象变化趋势图判断是否存在内存泄露;
查找模块,用于在所述判断模块的判断结果为是时,根据变化对象的引用关系查询引用路径与内存泄漏点。
8.根据权利要求5所述的JVM在线内存泄露分析系统,其特征在于,所述构建模块包括:
计算模块,用于将在预定时间后重新获取所述引用关系树与在间隔预定时间前获取的引用关系树进行计算;
变化信息获取模块,用于根据计算结果获取各节点信息的变化信息;
构建子模块,用于根据所述变化信息构建引用关系变化树。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410002172.2A CN103714004A (zh) | 2014-01-02 | 2014-01-02 | Jvm在线内存泄露分析方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410002172.2A CN103714004A (zh) | 2014-01-02 | 2014-01-02 | Jvm在线内存泄露分析方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103714004A true CN103714004A (zh) | 2014-04-09 |
Family
ID=50407001
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410002172.2A Pending CN103714004A (zh) | 2014-01-02 | 2014-01-02 | Jvm在线内存泄露分析方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103714004A (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105204996A (zh) * | 2015-09-24 | 2015-12-30 | 努比亚技术有限公司 | 内存泄露检测装置及方法、终端 |
CN105630662A (zh) * | 2014-10-28 | 2016-06-01 | 腾讯科技(深圳)有限公司 | 内存检测方法和装置 |
CN105790992A (zh) * | 2014-12-25 | 2016-07-20 | 深圳Tcl数字技术有限公司 | 网络节点信息的管理方法及装置 |
CN107102922A (zh) * | 2017-04-01 | 2017-08-29 | 北京三快在线科技有限公司 | 内存检测方法、装置及电子设备 |
CN108073441A (zh) * | 2016-11-14 | 2018-05-25 | 阿里巴巴集团控股有限公司 | 一种虚拟机内存监管方法与设备 |
CN108073439A (zh) * | 2016-11-11 | 2018-05-25 | 深圳业拓讯通信科技有限公司 | 一种jvm内存泄露自动检测方法以及系统 |
CN108664390A (zh) * | 2017-03-31 | 2018-10-16 | 华为技术有限公司 | 一种内存泄露检测方法及设备 |
CN109032827A (zh) * | 2018-07-03 | 2018-12-18 | 郑州云海信息技术有限公司 | 一种跟踪导致内存溢出异常的测试系统及方法 |
CN110502891A (zh) * | 2019-08-08 | 2019-11-26 | 北京字节跳动网络技术有限公司 | 一种获取进程内存泄露的方法、装置、介质和电子设备 |
CN110888712A (zh) * | 2019-10-10 | 2020-03-17 | 望海康信(北京)科技股份公司 | Java虚拟机优化方法及系统 |
CN111352734A (zh) * | 2020-02-26 | 2020-06-30 | 烽火通信科技股份有限公司 | 一种内存泄漏检测方法及内存管理模块 |
CN111352829A (zh) * | 2019-11-21 | 2020-06-30 | 杭州迪普科技股份有限公司 | 一种内存泄漏的测试方法、装置及设备 |
CN111858068A (zh) * | 2020-07-31 | 2020-10-30 | 重庆紫光华山智安科技有限公司 | 一种Java程序性能问题定位方法及装置 |
CN111858339A (zh) * | 2020-07-22 | 2020-10-30 | 腾讯科技(成都)有限公司 | 内存分析方法、设备和系统以及计算设备、计算机可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050268286A1 (en) * | 2004-04-12 | 2005-12-01 | Motoki Obata | Method of detecting memory leak causing portion and execution program thereof |
US20080301646A1 (en) * | 2007-05-29 | 2008-12-04 | Satish Chandra Gupta | Detecting Dangling Pointers and Memory Leaks Within Software |
CN101710303A (zh) * | 2009-12-01 | 2010-05-19 | 中国人民解放军国防科学技术大学 | 基于流敏感上下文敏感指向图的内存泄漏检测方法 |
CN102148844A (zh) * | 2010-02-09 | 2011-08-10 | 深圳市金蝶中间件有限公司 | 定位内存泄漏的方法、服务器端、客户端和系统 |
-
2014
- 2014-01-02 CN CN201410002172.2A patent/CN103714004A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050268286A1 (en) * | 2004-04-12 | 2005-12-01 | Motoki Obata | Method of detecting memory leak causing portion and execution program thereof |
US20080301646A1 (en) * | 2007-05-29 | 2008-12-04 | Satish Chandra Gupta | Detecting Dangling Pointers and Memory Leaks Within Software |
CN101710303A (zh) * | 2009-12-01 | 2010-05-19 | 中国人民解放军国防科学技术大学 | 基于流敏感上下文敏感指向图的内存泄漏检测方法 |
CN102148844A (zh) * | 2010-02-09 | 2011-08-10 | 深圳市金蝶中间件有限公司 | 定位内存泄漏的方法、服务器端、客户端和系统 |
Non-Patent Citations (1)
Title |
---|
查伟: ""关于 Java内存泄漏问题的研究"", 《咸宁学院学报》 * |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105630662A (zh) * | 2014-10-28 | 2016-06-01 | 腾讯科技(深圳)有限公司 | 内存检测方法和装置 |
CN105630662B (zh) * | 2014-10-28 | 2019-07-19 | 腾讯科技(深圳)有限公司 | 内存检测方法和装置 |
CN105790992A (zh) * | 2014-12-25 | 2016-07-20 | 深圳Tcl数字技术有限公司 | 网络节点信息的管理方法及装置 |
CN105204996A (zh) * | 2015-09-24 | 2015-12-30 | 努比亚技术有限公司 | 内存泄露检测装置及方法、终端 |
CN108073439A (zh) * | 2016-11-11 | 2018-05-25 | 深圳业拓讯通信科技有限公司 | 一种jvm内存泄露自动检测方法以及系统 |
CN108073441A (zh) * | 2016-11-14 | 2018-05-25 | 阿里巴巴集团控股有限公司 | 一种虚拟机内存监管方法与设备 |
CN108073441B (zh) * | 2016-11-14 | 2022-05-10 | 阿里巴巴集团控股有限公司 | 一种虚拟机内存监管方法与设备 |
CN108664390A (zh) * | 2017-03-31 | 2018-10-16 | 华为技术有限公司 | 一种内存泄露检测方法及设备 |
CN107102922A (zh) * | 2017-04-01 | 2017-08-29 | 北京三快在线科技有限公司 | 内存检测方法、装置及电子设备 |
CN109032827A (zh) * | 2018-07-03 | 2018-12-18 | 郑州云海信息技术有限公司 | 一种跟踪导致内存溢出异常的测试系统及方法 |
CN110502891A (zh) * | 2019-08-08 | 2019-11-26 | 北京字节跳动网络技术有限公司 | 一种获取进程内存泄露的方法、装置、介质和电子设备 |
CN110888712A (zh) * | 2019-10-10 | 2020-03-17 | 望海康信(北京)科技股份公司 | Java虚拟机优化方法及系统 |
CN110888712B (zh) * | 2019-10-10 | 2022-10-11 | 望海康信(北京)科技股份公司 | Java虚拟机优化方法及系统 |
CN111352829A (zh) * | 2019-11-21 | 2020-06-30 | 杭州迪普科技股份有限公司 | 一种内存泄漏的测试方法、装置及设备 |
CN111352734A (zh) * | 2020-02-26 | 2020-06-30 | 烽火通信科技股份有限公司 | 一种内存泄漏检测方法及内存管理模块 |
CN111858339A (zh) * | 2020-07-22 | 2020-10-30 | 腾讯科技(成都)有限公司 | 内存分析方法、设备和系统以及计算设备、计算机可读存储介质 |
CN111858339B (zh) * | 2020-07-22 | 2023-11-28 | 腾讯科技(成都)有限公司 | 内存分析方法、设备和系统以及计算设备、计算机可读存储介质 |
CN111858068A (zh) * | 2020-07-31 | 2020-10-30 | 重庆紫光华山智安科技有限公司 | 一种Java程序性能问题定位方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103714004A (zh) | Jvm在线内存泄露分析方法及系统 | |
US10229129B2 (en) | Method and apparatus for managing time series database | |
US10031671B2 (en) | Method, apparatus, and system for calculating identification threshold to distinguish cold data and hot data | |
WO2018149345A1 (zh) | 一种数据处理方法及装置 | |
TWI662426B (zh) | 分布式流式資料處理的方法和裝置 | |
CN103902653B (zh) | 一种构建数据仓库表血缘关系图的方法和装置 | |
WO2017045472A1 (zh) | 资源预测方法、系统和容量管理装 | |
TW202029079A (zh) | 異常群體識別方法及裝置 | |
WO2015020922A1 (en) | Dynamic collection analysis and reporting of telemetry data | |
WO2013025874A3 (en) | Page reporting | |
WO2017070305A8 (en) | System and method for detecting interaction and influence in networks | |
KR101764674B1 (ko) | 침해 자원에 대한 그래프 데이터베이스 생성 방법 및 그 장치 | |
EP2897401B1 (en) | Method and device for guaranteeing consistency of planning data | |
US20150222717A1 (en) | Apparatus and method for updating ip geographic information | |
CN110245145A (zh) | 关系型数据库到Hadoop数据库的结构同步方法和装置 | |
CN109388614A (zh) | 一种目录文件个数配额的方法、系统及设备 | |
CN105227405A (zh) | 监控方法及系统 | |
US20160147880A1 (en) | Multi-dimensional visualization of query execution in distributed databases | |
CN105159925B (zh) | 一种数据库集群数据分配方法及系统 | |
CN104184601B (zh) | 用户在线时长的获取方法及装置 | |
CN105610899A (zh) | 一种文本文件并行上传方法及装置 | |
CN105242873B (zh) | 云计算系统的性能数据的采集与存储方法及装置 | |
JP2015201060A (ja) | センサデータ収集システム | |
CN112217657A (zh) | 基于sd-wan系统的数据传输方法、数据处理方法、设备和介质 | |
CN107704362A (zh) | 一种基于Ambari监控大数据组件的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140409 |