本发明涉及计算机,尤其涉及一种内存泄漏检测技术,以及基于所述内存泄漏检测技术所实现的内存分析诊断技术。
背景技术:
1、java具有自动内存管理机制,能够自动实现对内存的回收,java应用在运行过程中仍会出现内存问题,且其存在的内存问题表现不明显,往往需要java应用运行一段时间后才暴露,将导致java应用运行缓慢或崩溃。
2、内存问题包括内存泄露,现有的内存分析工具难以直观、准确的定位内存泄露对象,需要开发人员花费大量的时间和精力进行排查,检测效率低且人工成本高。
技术实现思路
1、本发明针对现有技术中对内存泄露问题的检测方案效率低,人工成本高的缺点,提供了内存泄漏检测技术,以及基于所述内存泄漏检测技术所实现的内存分析诊断技术,能够帮助开发人员快速准确的定位内存泄露对象。
2、为了解决上述技术问题,本发明通过下述技术方案得以解决:
3、一种内存泄漏检测方法,包括以下步骤:
4、获取内存dump文件,并对所述内存dump文件进行解析,获得解析数据;
5、基于所述解析数据构建第一对象集和第二对象集,所述第一对象集包含所有对象,所述第二对象集包含根对象,以及各根对象的直接引用对象和间接引用对象;
6、对所述第一对象集和所述第二对象集进行比对分析,获得泄露对象候选集,所述泄露对象候选集用于指示存在泄露风险的候选对象。
7、作为一种可实施方式,基于所述解析数据构建第二对象集的具体步骤为:
8、基于所述解析数据提取根对象,以根对象作为根节点;
9、基于各根节点构建与所述根节点相对应的引用关系链,获得对象关系图;
10、遍历所述对象关系图,提取根对象以及各根对象的直接引用对象和间接引用对象,构建第二对象集。
11、作为一种可实施方式,构建与所述根节点相对应的引用关系链的具体步骤为:
12、基于所述解析数据获取所述目标对象的直接引用对象,所述目标对象为当前节点所对应的对象,起始将所述根节点作为当前节点,将对应的根对象作为目标对象;
13、于对象关系图中查找各直接引用对象所对应的节点;
14、当所述对象关系图中存在所述直接引用对象所对应的节点时,令当前节点与所述直接引用对象所对应的节点建立连接;
15、当所述对象关系图中不存在所述直接引用对象所对应的节点时,于所述对象关系图中添加与所述直接引用对象相对应的节点,并令当前节点与所述直接引用对象所对应的节点建立连接;
16、将新添加的节点作为当前节点,重复获取新的目标对象的直接引用对象,并基于所获取的直接引用对象更新所述对象关系图,直至新的目标对象无相应的直接引用对象,于所述对象关系图中完成对所述根节点相对应的引用关系链的构建。
17、作为一种可实施方式:
18、使用heapanalyer库对所述内存dump文件进行解析,获得相应的解析数据。
19、作为一种可实施方式:
20、基于预设的检测规则,对至少两个连续的泄漏对象候选集进行比对分析,确定泄漏对象。
21、一种内存泄漏检测装置,包括:
22、解析单元,用于获取内存dump文件,并对所述内存dump文件进行解析,获得解析数据;
23、处理单元,用于基于所述解析数据构建第一对象集和第二对象集,所述第一对象集包含所有对象,所述第二对象集包含根对象,以及各根对象的直接引用对象和间接引用对象;
24、分析单元,用于对所述第一对象集和所述第二对象集进行比对分析,获得泄露对象候选集,所述泄露对象候选集用于指示存在泄露风险的候选对象。
25、一种内存分析诊断方法,包括以下步骤:
26、预先为java应用挂载agent,由agent接收dump命令,并根据所述dump命令生成所述java应用的内存dump文件并储存;
27、获取所述内存dump文件,并对所述内存dump文件进行分析诊断,输出诊断结果;
28、所述诊断结果包括内存泄露检测结果,根据上述任意一项所述的内存泄露检测方法对所述内存dump文件进行内存泄漏检测,输出相应的内存泄露检测结果。
29、作为一种可实施方式:
30、所述诊断结果还包括内存溢出检测结果。
31、一种内存分析诊断系统,包括:
32、若干个代理模块,所述代理模块与java应用一一对应,所述代理模块用于接收dump命令,并根据所述dump命令生成所挂载的java应用的内存dump文件;
33、文件服务器,用于存储所述内存dump文件;
34、分析模块,用于从所述文件管理器中获取所述内存dump文件,并对所述内存dump文件进行分析诊断,输出诊断结果;
35、所述诊断结果包括内存泄露检测结果,所述分析模块包括泄露检测模块;
36、所述泄露检测模块用于根据上述任意一项所述的内存泄露检测方法对所述内存dump文件进行内存泄漏检测,输出相应的内存泄露检测结果。
37、作为一种可实施方式,还包括控制台,所述控制台:
38、用于通过各代理模块获取对应java应用的应用信息;
39、还用于获取用户发起的诊断分析请求,所述诊断分析请求包括应用信息和存储信息,所述应用信息用于指示待检测应用,所述存储信息用于指示待检测应用的内存dump文件在所述文件服务器中的存储位置;
40、还用于基于所述诊断分析请求生成对应的dump命令,并将所述dump命令下发至相应的代理模块;
41、还用于将所述分析模块输出的诊断结果反馈给用户。
42、本发明由于采用了以上技术方案,具有显著的技术效果:
43、本发明所提出的内存泄漏检测方法通过对包含所有对象第一对象集、以及包含根对象和各根对象的直接/间接引用对象的第二对象集进行比对分析,以找出存在泄露风险的对象,与现有技术相比,大大缩减了需要排查的对象,能够有效提高检测效率并降低人工成本。
44、本发明所提出的内存分析诊断方法中采用java agent技术挂载agent接入java应用,对应用程序无入侵,且能够自动采集和分析内存数据,无需手动导出和分析dump文件,提高生产环境java应用堆泄露等问题的排查效率。
1.一种内存泄漏检测方法,其特征在于包括以下步骤:
2.根据权利要求1所述的内存泄漏检测方法,其特征在于,基于所述解析数据构建第二对象集的具体步骤为:
3.根据权利要求2所述的内存泄漏检测方法,其特征在于,构建与所述根节点相对应的引用关系链的具体步骤为:
4.根据权利要求1所述的内存泄漏检测方法,其特征在于:
5.根据权利要求1所述的内存泄漏检测方法,其特征在于:
6.一种内存泄漏检测装置,其特征在于包括:
7.一种内存分析诊断方法,其特征在于包括以下步骤:
8.根据权利要求7所述的内存分析诊断方法,其特征在于:
9.一种内存分析诊断系统,其特征在于,包括:
10.根据权利要求9所述的内存分析诊断系统,其特征在于,还包括控制台,所述控制台: