CN105446871B - 一种资源泄漏检测方法、装置及*** - Google Patents

一种资源泄漏检测方法、装置及*** Download PDF

Info

Publication number
CN105446871B
CN105446871B CN201410425600.2A CN201410425600A CN105446871B CN 105446871 B CN105446871 B CN 105446871B CN 201410425600 A CN201410425600 A CN 201410425600A CN 105446871 B CN105446871 B CN 105446871B
Authority
CN
China
Prior art keywords
resource
storage
target
ratio value
leakage
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
CN201410425600.2A
Other languages
English (en)
Other versions
CN105446871A (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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201410425600.2A priority Critical patent/CN105446871B/zh
Priority to PCT/CN2015/079872 priority patent/WO2016029723A1/zh
Priority to EP15834959.7A priority patent/EP3171274B1/en
Priority to JP2017511234A priority patent/JP6446125B2/ja
Publication of CN105446871A publication Critical patent/CN105446871A/zh
Priority to US15/441,837 priority patent/US10289472B2/en
Application granted granted Critical
Publication of CN105446871B publication Critical patent/CN105446871B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • 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/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3037Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3452Performance evaluation by statistical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Quality & Reliability (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • Probability & Statistics with Applications (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例公开了一种资源泄漏检测方法、装置及***,所述方法包括:获取程序的目标代码运行时所调用的目标资源;其中,目标代码为程序代码中的部分代码;确定目标资源所占用的第一存储资源量;判断目标资源所占用的第一存储资源量是否满足第一预设条件;若目标资源所占用的第一存储资源量满足第一预设条件,将目标代码的存储位置确定为资源泄漏位置。本发明实施例中,可对程序的目标代码进行跟踪,并可进一步检测将目标代码的存储位置确定为资源泄漏位置,无需跟踪所有的资源分配和释放,从而可降低性能开销,提高了资源泄漏的检测效率。

Description

一种资源泄漏检测方法、装置及***
技术领域
本发明涉及计算机领域,尤其涉及一种资源泄漏检测方法、装置及***。
背景技术
程序在运行过程中,通常会调用一些资源,例如内存、文件句柄、信号量、消息包、数据库连接池等,而程序在运行结束后,需要及时释放所调用的资源。资源泄漏是指由于漏释放或踩内存等问题造成程序不能释放已经不再使用的资源,使得这些资源不能被再利用。随着资源不断泄漏,***的可用资源越来越少,从而导致***性能下降,甚至最终***由于资源不足而无法提供服务和处理业务。
一种现有技术中,在内存分配时,在日志文件中记录内存分配的次数和内存分配的大小,在内存释放时,在日志文件中记录内存释放的次数及内存释放的大小,根据记录的内存分配的次数、内存分配的大小、内存释放的次数和内存释放的大小确定未释放内存的次数和未释放内存的大小,从而检测到内存泄漏。该现有技术中,需要跟踪和记录所有的内存分配和内存释放,检测开销高且效率低,仅能在程序的测试阶段或调试阶段使用,不能在程序实际运行的在线环境进行内存泄漏检测,对于较隐蔽且在程序实际运行时出现的内存泄露无法检测,未检测到的内存泄露会造成业务受损甚至业务中断。
发明内容
本发明实施例提供一种资源泄漏检测方法、装置及***,可降低性能开销,提高资源泄漏的检测效率。
本发明实施例第一方面提供了一种资源泄漏检测方法,包括:
获取程序的目标代码运行时所调用的目标资源;其中,所述目标代码为程序代码中的部分代码;
确定所述目标资源所占用的第一存储资源量;
判断所述目标资源所占用的第一存储资源量是否满足第一预设条件;所述第一预设条件的设置以所述目标资源所占用的第一存储资源量构成资源泄漏为准;
若所述目标资源所占用的第一存储资源量满足第一预设条件,将所述目标代码的存储位置确定为资源泄漏位置。
在第一方面的第一种可能的实现方式中,所述目标资源包括至少二个目标子资源,所述目标子资源是在运行所述目标代码过程中调用的所述目标资源中的部分资源;所述方法还包括:
获取所述目标代码运行时调用所述目标子资源的调用路径;
确定所述目标子资源占用所述第一存储资源量的比例值;
判断所述目标子资源占用所述第一存储资源量的比例值是否满足第二预设条件;所述第二预设条件的设置以所述目标子资源占用所述第一存储资源量的比例值构成资源泄漏为准;
若所述目标子资源占用所述第一存储资源量的比例值满足第二预设条件,则将调用所述目标子资源的调用路径确定为资源泄漏调用路径。
在第一方面的第二种可能的实现方式中,所述第一预设条件包括第一预设阈值或第一预设增长规则,所述第一预设阈值的设置以使所述第一存储资源量大于构成资源泄漏的所述第一存储资源量的最低值为准;所述第一预设增长规则的设置以所述第一存储资源量在资源周期内的增长趋势变化构成资源泄漏为准,其中,所述资源周期为所述目标资源占用存储空间的生命周期;
所述判断所述目标资源所占用的第一存储资源量是否满足第一预设条件包括:
判断所述目标资源占用的所述第一存储资源量是否大于所述第一预设阈值,若所述目标资源占用的所述第一存储资源量大于所述第一预设阈值,确定所述目标资源所占用的第一存储资源量满足所述第一预设条件;或
判断所述目标资源占用的所述第一存储资源量在资源周期内是否满足所述第一预设增长规则;若所述目标资源占用的所述第一存储资源量在资源周期内满足所述第一预设增长规则,确定所述目标资源所占用的第一存储资源量满足所述第一预设条件。
结合第一方面的第一种可能实现方式,在第一方面的第三种可能的实现方式中,所述第二预设条件包括:第二预设阈值或第二预设增长规则,所述第二预设阈值的设置以使所述第一存储资源量的比例值大于构成资源泄漏的所述目标子资源占用所述第一存储资源量的比例值的最低值为准;所述第二预设增长规则的设置以所述目标子资源占用所述第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,所述资源周期为所述目标资源占用存储空间的生命周期;
所述判断所述目标子资源占用所述第一存储资源量的比例值是否满足第二预设条件包括:
判断所述目标子资源占用的所述第一存储资源量的比例值是否大于所述第二预设阈值,若所述目标子资源占用的所述第一存储资源量的比例值大于所述第二预设阈值时,确定所述目标子资源占用所述第一存储资源量的比例值满足所述第二预设条件;或
判断所述目标子资源占用的所述第一存储资源量的比例值在资源周期内是否满足所述第二预设增长规则,若所述目标子资源占用的所述第一存储资源量的比例值在资源周期内满足所述第二预设增长规则,确定所述目标子资源占用所述第一存储资源量的比例值满足所述第二预设条件。
在第一方面的第四种可能的实现方式中,所述目标代码的存储位置包括至少二个存储位置单元,其中,每一个所述存储位置单元中分别存储有子代码,所述至少二个存储位置单元中存储的所述子代码构成所述目标代码,所述方法还包括:
获取所述存储位置单元中存储的所述子代码运行时所调用的目标子资源;其中,所述至少二个存储位置单元中存储的所述子代码运行时所调用的目标子资源构成所述目标资源;
确定所述存储位置单元中存储的所述子代码运行时所调用的目标子资源占用所述第一存储资源量的比例值;
判断所述比例值是否满足第三预设条件;所述第三预设条件的设置以所述存储位置单元中存储的所述子代码运行时所调用的目标子资源占用所述第一存储资源量的比例值构成资源泄漏为准;
若所述比例值满足第三预设条件,则将所述存储位置单元确定为资源泄漏位置单元。
结合第一方面的第四种可能实现方式,在第一方面的第五种可能的实现方式中,所述第三预设条件包括第三预设阈值或第三预设增长规则,所述第三预设阈值的设置以使所述目标子资源占用所述第一存储资源量的比例值大于构成资源泄漏的所述目标子资源占用所述第一存储资源量的比例值的最低值为准;所述第三预设增长规则的设置以所述目标子资源占用所述第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,所述资源周期为所述目标资源占用存储空间的生命周期;
所述判断所述比例值是否满足第三预设条件包括:
判断所述比例值是否大于所述第三预设阈值,若所述比例值大于所述第三预设阈值,确定所述比例值满足所述第三预设条件;或
判断所述比例值在资源周期内是否满足所述第三预设增长规则;若所述比例值在资源周期内满足所述第三预设增长规则,确定所述比例值满足所述第三预设条件。
本发明实施例第二方面提供了一种资源泄漏检测装置,包括:
第一获取模块,用于获取程序的目标代码运行时所调用的目标资源;其中,所述目标代码为程序代码中的部分代码;
第一确定模块,用于确定所述目标资源所占用的第一存储资源量;
第一判断模块,用于判断所述目标资源所占用的第一存储资源量是否满足第一预设条件;所述第一预设条件的设置以所述目标资源所占用的第一存储资源量构成资源泄漏为准;泄漏位置确定模块,用于当所述第一判断模块的判断结果为是时,将所述目标代码的存储位置确定为资源泄漏位置。
在第二方面的第一种可能的实现方式中,所述目标资源包括至少二个目标子资源,所述目标子资源是在运行所述目标代码过程中调用的所述目标资源中的部分资源;所述装置还包括:
第二获取模块,用于获取所述目标代码运行时调用所述目标子资源的调用路径;
第二确定模块,用于确定所述目标子资源占用所述第一存储资源量的比例值;
第二判断模块,用于判断所述目标子资源占用所述第一存储资源量的比例值是否满足第二预设条件;所述第二预设条件的设置以所述目标子资源占用所述第一存储资源量的比例值构成资源泄漏为准;
泄漏路径确定模块,用于当所述第二判断模块的判断结果为是时,将调用所述目标子资源的调用路径确定为资源泄漏调用路径。
在第二方面的第二种可能的实现方式中,所述第一预设条件包括第一预设阈值或第一预设增长规则,所述第一预设阈值的设置以使所述第一存储资源量大于构成资源泄漏的所述第一存储资源量的最低值为准;所述第一预设增长规则的设置以所述第一存储资源量在资源周期内的增长趋势变化构成资源泄漏为准,其中,所述资源周期为所述目标资源占用存储空间的生命周期;
所述第一判断模块包括:第一判断子模块或第二判断子模块;
所述第一判断子模块,用于判断所述目标资源占用的所述第一存储资源量是否大于所述第一预设阈值,在所述第一判断子模块的判断结果为是时,确定所述第一判断模块的判断结果为是;
所述第二判断子模块,用于判断所述目标资源占用的所述第一存储资源量在资源周期内是否满足所述第一预设增长规则;在所述第二判断子模块的判断结果为是时,确定所述第一判断模块的判断结果为是。
结合第二方面的第一种可能实现方式,在第一方面的第三种可能的实现方式中,所述第二预设条件包括:第二预设阈值或第二预设增长规则,所述第二预设阈值的设置以使所述第一存储资源量的比例值大于构成资源泄漏的所述目标子资源占用所述第一存储资源量的比例值的最低值为准;所述第二预设增长规则的设置以所述目标子资源占用所述第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,所述资源周期为所述目标资源占用存储空间的生命周期;
所述第二判断模块包括:第三判断子模块或第四判断子模块;
所述第三判断子模块,用于判断所述目标子资源占用的所述第一存储资源量的比例值是否大于所述第二预设阈值,在所述第三判断子模块的判断结果为是时,确定所述第二判断模块的判断结果为是;
所述第四判断子模块,判断所述目标子资源占用的所述第一存储资源量的比例值在资源周期内是否满足所述第二预设增长规则,在所述第四判断子模块的判断结果为是时,确定所述第二判断模块的判断结果为是。
在第一方面的第四种可能的实现方式中,所述目标代码的存储位置包括至少二个存储位置单元,其中,每一个所述存储位置单元中分别存储有子代码,所述至少二个存储位置单元中存储的所述子代码构成所述目标代码,所述装置还包括:
第三获取模块,用于获取所述存储位置单元中存储的所述子代码运行时所调用的目标子资源;其中,所述至少二个存储位置单元中存储的所述子代码运行时所调用的目标子资源构成所述目标资源;
第三确定模块,用于确定所述存储位置单元中存储的所述子代码运行时所调用的目标子资源占用所述第一存储资源量的比例值;
第三判断模块,用于判断所述比例值是否满足第三预设条件;所述第三预设条件的设置以所述存储位置单元中存储的所述子代码运行时所调用的目标子资源占用所述第一存储资源量的比例值构成资源泄漏为准;泄漏位置单元确定模块,用于在所述第三判断模块的判断结果为是时,将所述存储位置单元确定为资源泄漏位置单元。
结合第二方面的第四种可能实现方式,在第一方面的第五种可能的实现方式中,所述第三预设条件包括第三预设阈值或第三预设增长规则,所述第三预设阈值的设置以使所述目标子资源占用所述第一存储资源量的比例值大于构成资源泄漏的所述目标子资源占用所述第一存储资源量的比例值的最低值为准;所述第三预设增长规则的设置以所述目标子资源占用所述第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,所述资源周期为所述目标资源占用存储空间的生命周期;
所述第三判断模块包括:第五判断子模块或第六判断子模块;
所述第五判断子模块,用于判断所述比例值是否大于所述第三预设阈值,在所述第五判断子模块的判断结果为是时,确定所述第三判断模块的判断结果为是;
所述第六判断子模块,用于判断所述比例值在资源周期内是否满足所述第三预设增长规则,其中,所述资源周期为所述第一存储资源量的占用周期;在所述第六判断子模块的判断结果为是时,确定所述第三判断模块的判断结果为是。
本发明实施例第三方面提供了一种资源泄漏检测***,包括存储器、资源泄漏检测装置以及显示装置,其中,
所述存储器,用于存储资源泄漏检测程序;
所述资源泄漏检测装置,用于运行所述存储器中存储的所述资源泄漏检测程序,以执行如第一方面、第一方面的第一种可能实现方式、第二种可能实现方式、第三种可能实现方式、第四种可能实现方式中任意一项所述的资源泄漏检测方法;
所述显示装置,用于显示所述资源泄漏检测装置获得的资源泄漏检测结果。
实施本发明实施例,可获取程序的目标代码运行时所调用的目标资源,确定目标资源所占用的第一存储资源量,在判断到目标资源所占用的第一存储资源量满足第一预设条件时,可将目标代码的存储位置确定为资源泄漏位置,从而可对程序的目标代码进行跟踪,并可进一步检测将目标代码的存储位置确定为资源泄漏位置,本发明实施例中,对程序的目标代码进行跟踪,其中,目标代码为程序代码中的部分代码,无需对程序的所有代码进行跟踪,仅需对目标代码运行时所调用的目标资源进行检测,无需跟踪所有的资源分配和释放,性能开销低,不影响正常的业务运行,从而可在程序实际运行的在线环境进行资源泄漏检测,提高了资源泄漏的检测效率。
进一步地,不仅可以在程序的测试阶段或调试阶段进行泄漏检测,也可以在程序实际运行的在线环境进行泄漏检测,从而可以检测程序正式运行时出现的资源泄漏的问题。本发明实施例,对程序的目标代码进行跟踪,可检测到资源泄漏位置,从而可提高资源泄漏检测的精度,可在程序实际运行的在线环境进行资源泄漏检测,降低了漏报率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明第一实施例提供的一种资源泄漏检测方法的示意图;
图2为本发明第二实施例提供的一种资源泄漏检测方法的示意图;
图3为本发明第三实施例提供的一种资源泄漏检测方法的示意图;
图4为本发明实施例提供的一种资源泄漏检测装置的结构示意图;
图5为本发明实施例提供的一种检测终端的结构示意图;
图6为本发明实施例提供的一种资源泄漏检测***的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种资源泄漏检测方法及装置。本发明实施中的一种资源泄漏检测装置可以包括:智能手机、平板电脑、电脑、服务器等可运行程序的终端设备,进一步的,本发明实施例中的资源泄漏检测装置还可以包括:终端设备中的客户端模块,例如,资源检测客户端等。
本发明实施例提供一种资源泄漏检测方案可以应用于对例如安卓Android操作***、Linux操作***等操作***中的资源泄漏的检测,还可以应用于对例如办公软件、通讯软件等应用程序中的资源泄漏的检测,具体不受本发明实施例的限制,本发明实施例中的程序可以包括:例如Android操作***、Linux操作***等操作***,还可以包括安装于终端设备中的应用程序,还可以包括在终端设备中运行的进程等等,具体不受本发明实施例的限制。下面通过具体实施例进行说明。
请参阅图1,图1为本发明第一实施例提供的一种资源泄漏检测方法的流程图,如图1所示,本实施例中的流程包括以下步骤。
S101,获取程序的目标代码运行时所调用的目标资源;其中,目标代码为程序代码中的部分代码。
作为一种可选的实施方式,本发明实施例中的程序可以包括:例如Android操作***、Linux操作***等操作***,还可以包括安装于终端设备中的应用程序,还可以包括在终端设备中运行的进程等等,具体不受本发明实施例的限制。
进一步可选的,本发明实施例中程序的目标代码在运行过程中,会调用目标资源,目标资源例如内存、文件句柄、信号量、消息包、数据库连接池等,而程序的目标代码在运行结束后,需要及时释放所调用的目标资源。其中,目标代码为程序代码中的部分代码,目标代码为本发明实施例中需要进行泄漏检测的代码。
进一步的,程序代码可以包括多组目标代码,可以为程序代码在开发设计时根据功能模块、内存区间等类别对程序代码进行分类得到多组目标代码,例如,在程序为一个进程时,可根据程序代码的功能对程序代码进行划分,得到不同模块,每个模块对应一组目标代码,也可按程序代码的分配内存块大小对程序代码进行划分,得到的不同大小的内存区间,每个内存区间对应一组目标代码;在程序为Linux操作***的slab内存时,可根据不同的slab内存池对程序代码进行划分,得到多组目标代码。
进一步的,在程序代码包括多组目标代码时,可分别获取每组目标代码运行时所调用的目标资源,每组目标代码运行时所调用的目标资源之和构成程序代码运行时所调用的资源。
S102,确定目标资源所占用的第一存储资源量。
作为一种可选的实施方式,目标资源所占用的第一存储资源量的初始值可设为0,在申请资源分配时,目标资源所占用的第一存储资源量=初始值+分配得到的资源量,在资源释放结束后,目标资源所占用的第一存储资源量=初始值+分配得到的资源量-释放的资源量,从而可由初始值、分配得到的资源量、释放的资源量确定目标资源所占用的第一存储资源量。具体实现中,目标资源所占用的第一存储资源量可以是资源的个数或具体的度量大小,例如内存的字节数等。
S103,判断目标资源所占用的第一存储资源量是否满足第一预设条件。第一预设条件为目标资源所占用的第一存储资源量符合资源泄漏条件。
如果S103的判断结果为是,执行步骤S104。如果S103的判断结果为否,返回步骤S101~S103,重新获取程序的另一目标代码运行时所需调用的目标资源。
作为一种可选的实施方式,目标资源所占用的第一存储资源量包括但不局限于:内存占用量、文件句柄占用量、信号量占用量、消息包占用量、数据库连接池占用量等,具体不受本发明实施例的限制。
进一步的,本发明实施例中,第一预设条件的设置以目标资源所占用的第一存储资源量构成资源泄漏为准,进一步的,第一预设条件可以包括第一预设阈值或第一预设增长规则,其中,第一预设阈值的设置以使第一存储资源量大于构成资源泄漏的第一存储资源量的最低值为准;第一预设增长规则的设置以第一存储资源量在资源周期内的增长趋势变化构成资源泄漏为准,其中,资源周期为目标资源占用存储空间的生命周期。进一步的,步骤S103中判断目标资源所占用的第一存储资源量是否满足第一预设条件具体可以包括:
判断目标资源占用的第一存储资源量是否大于第一预设阈值,若目标资源占用的第一存储资源量大于第一预设阈值,确定目标资源所占用的第一存储资源量满足第一预设条件;或
判断目标资源占用的第一存储资源量在资源周期内是否满足第一预设增长规则;若目标资源占用的第一存储资源量在资源周期内满足第一预设增长规则,确定目标资源所占用的第一存储资源量满足第一预设条件。
具体实现中,第一预设条件可以包括第一预设阈值或第一预设增长规则,其中,第一预设阈值的设置以使第一存储资源量大于构成资源泄漏的所述第一存储资源量的最低值为准;第一预设增长规则的设置以第一存储资源量在资源周期内的增长趋势变化构成资源泄漏为准,进一步的,资源周期为目标资源占用存储空间的生命周期,具体可以为对目标资源进行申请分配资源到释放资源结束之间的时间间隔。
本发明实施例中,可判断目标资源占用的第一存储资源量在资源周期内是否满足第一预设增长规则;若目标资源占用的第一存储资源量在资源周期内满足第一预设增长规则,确定目标资源所占用的第一存储资源量满足第一预设条件。例如,可将每个资源周期的目标资源占用的第一存储资源量作一增长变化曲线图,可通过增长变化曲线判断满足第一预设增长规则。具体实现中,可采用例如Mann-Kendall检验方法、线性回归、Sen斜率估计法等算法判断目标资源占用的第一存储资源量在资源周期内是否满足第一预设增长规则,其中,Mann-Kendall检验方法为由Mann首先提出、由Kendall进一步改善的用于检测趋势的算法;线性回归为统计学中利用回归分析、基于线性函数建模变量之间定量关系的一种统计分析方法;Sen斜率估计法指由Henri Theil和Pranab K.Sen提出的斜率估计算法。
S104,将目标代码的存储位置确定为资源泄漏位置。
作为一种可选的实施方式,在S103的判断结果为是,即判断到目标资源所占用的第一存储资源量满足第一预设条件时,将目标代码的存储位置确定为资源泄漏位置。具体实现中,目标代码的存储位置具体可以包括:目标代码存储所在的文件和行号。
进一步可选的,在程序代码包括多组目标代码时,对每组目标代码,可同时执行步骤S101~S103,若S103中判断结果为是,在满足第一预设条件的目标代码的组数(记为M)大于预设数量时(记为K,K可以为预先设定的程序中资源泄漏位置的最多数目),则可从满足第一预设条件的多组目标代码中确定K个目标代码的存储位置为资源泄漏位置,例如,预设数量为3,满足第一预设条件的目标代码的组数为5,则5大于3,满足第一预设条件的5组目标代码分别为:目标代码1、目标代码2、目标代码3、目标代码4和目标代码5,目标代码1运行时所调用目标资源1,目标资源1所占用的第一存储资源量为资源量1,目标代码2运行时所调用目标资源2,目标资源2所占用的第一存储资源量为资源量2,目标代码3运行时所调用目标资源3,目标资源3所占用的第一存储资源量为资源量3,目标代码4运行时所调用目标资源4,目标资源4所占用的第一存储资源量为资源量4,目标代码5运行时所调用目标资源5,目标资源5所占用的第一存储资源量为资源量5,则可比较资源量1、资源量2、资源量3、资源量4和资源量5的大小并进行大小排序,若比较结果为资源量5>资源量2>资源量4>资源量1>资源量3,则较大的预设数量个资源量为:资源量5、资源量2和资源量4,则可分别将资源量5、资源量2和资源量4对应的目标代码5、目标代码2和目标代码4的存储位置确定为资源泄漏位置。
进一步可选的,本发明实施例提供的资源泄漏检测方法在步骤S103之后,还可以包括:
输出资源泄漏检测结果信息。
具体实现中,资源泄漏检测结果信息包括:目标代码的属性信息、目标资源所占用的第一存储资源量、资源泄漏位置的信息、资源泄漏调用路径的信息、资源泄漏调用路径的资源占用数量信息。上述资源泄漏检测结果信息可在资源分配时进行记录。输出资源泄漏检测结果信息出,可提高对资源泄漏的定位的精准度,减小定位工作量和降低对定位人员的技能要求,且不再需要在实验室复现,提高了资源泄漏定位的效率。
实施本发明实施例,可获取程序的目标代码运行时所调用的目标资源,确定目标资源所占用的第一存储资源量,在判断到目标资源所占用的第一存储资源量满足第一预设条件时,可将目标代码的存储位置确定为资源泄漏位置,从而可对程序的目标代码进行跟踪,并可进一步检测将目标代码的存储位置确定为资源泄漏位置,本发明实施例中,对程序的目标代码进行跟踪,其中,目标代码为程序代码中的部分代码,无需对程序的所有代码进行跟踪,仅需对目标代码运行时所调用的目标资源进行检测,无需跟踪所有的资源分配和释放,性能开销低,不影响正常的业务运行,从而可在程序实际运行的在线环境进行资源泄漏检测,提高了资源泄漏的检测效率。
进一步地,不仅可以在程序的测试阶段或调试阶段进行泄漏检测,也可以在程序实际运行的在线环境进行泄漏检测,从而可以检测程序正式运行时出现的资源泄漏的问题。本发明实施例,可对程序的目标代码进行跟踪,可检测到资源泄漏位置,从而可提高资源泄漏检测的精度,可在程序实际运行的在线环境进行资源泄漏检测,降低了漏报率。
请参阅图2,图2为本发明第二实施例提供的一种资源泄漏检测方法的示意图,如图2所示,本发明实施例提供的方法可基于图1所示的方法来实现,具体的,可以在图1所示方法的步骤S104之后,可执行本发明实施例的步骤S201~S204。
如图2所示,本发明实施例提供的资源泄漏检测方法可进一步包括步骤S201~S204,其中:
S201,获取目标代码运行时调用目标子资源的调用路径。其中,目标资源可包括至少二个目标子资源,目标子资源是在运行目标代码过程中调用的目标资源中的部分资源。
具体实现中,调用路径可用函数调用栈表示,获取目标代码运行时调用目标子资源的调用路径,目标资源可包括至少二个目标子资源,其中,目标子资源是在运行目标代码过程中调用的目标资源中的部分资源。
进一步可选的,可将调用路径按一定的规则作映射,得到逻辑调用路径。例如,对S104中确定的资源泄漏位置,可依据资源分配的函数调用栈的层数划分一定数目的层类型,对每个层类型,预设M个逻辑调用路径,编号为0,1,2,…,M-1,取资源分配的函数调用栈的中间一层的返回地址转换为整数,再对M取模,将得到的结果作为逻辑调用路径号,则可获取目标代码运行时调用目标子资源的调用路径。
S202,确定目标子资源占用第一存储资源量的比例值。
具体实现中,可确定目标子资源占用第一存储资源量的比例值,例如,第一存储资源量为内存字节数1000kb,目标子资源占用第一存储资源量的比例值为200kb。
S203,判断目标子资源占用第一存储资源量的比例值是否满足第二预设条件。其中,第二预设条件的设置以目标子资源占用第一存储资源量的比例值构成资源泄漏为准。在S203的判断结果为是时,执行步骤S204,在S203的判断结果为否时,可返回执行步骤S201或者返回执行步骤S101。
进一步的,其中,第二预设条件的设置以目标子资源占用第一存储资源量的比例值构成资源泄漏为准,第二预设条件可以包括:第二预设阈值或第二预设增长规则,其中,第二预设阈值的设置以使第一存储资源量的比例值大于构成资源泄漏的目标子资源占用所述第一存储资源量的比例值的最低值为准;第二预设增长规则的设置以目标子资源占用第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,资源周期为所述目标资源占用存储空间的生命周期。具体的,步骤S203判断目标子资源占用第一存储资源量的比例值是否满足第二预设条件具体可以包括:
判断目标子资源占用的第一存储资源量的比例值是否大于第二预设阈值,若目标子资源占用的第一存储资源量的比例值大于第二预设阈值时,确定目标子资源占用第一存储资源量的比例值满足第二预设条件;或
判断目标子资源占用的第一存储资源量的比例值在资源周期内是否满足第二预设增长规则,若目标子资源占用的第一存储资源量的比例值在资源周期内满足第二预设增长规则,确定目标子资源占用第一存储资源量的比例值满足第二预设条件。
具体实现中,第二预设条件可以包括第二预设阈值或第二预设增长规则,其中,其中,第二预设阈值的设置以使第一存储资源量的比例值大于构成资源泄漏的目标子资源占用所述第一存储资源量的比例值的最低值为准;第二预设增长规则的设置以目标子资源占用第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,资源周期为所述目标资源占用存储空间的生命周期,具体可以为对目标资源进行申请分配资源到释放资源结束之间的时间间隔。
本发明实施例中,可判断目标子资源占用的第一存储资源量的比例值在资源周期内是否满足第二预设增长规则;若目标子资源占用的第一存储资源量的比例值在资源周期内满足第二预设增长规则,确定目标子资源占用第一存储资源量的比例值满足第二预设条件。例如,可将每个资源周期的目标子资源占用的第一存储资源量的比例值作一增长变化曲线图,可通过增长变化曲线判断满足第二预设增长规则。具体实现中,可采用例如Mann-Kendall检验方法、线性回归、Sen斜率估计法等算法判断目标子资源占用的第一存储资源量的比例值在资源周期内是否满足第二预设增长规则。
S204,将调用目标子资源的调用路径确定为资源泄漏调用路径。
作为一种可选的实施方式,在S203的判断结果为是,即判断到目标子资源占用的第一存储资源量的比例值在资源周期内满足第二预设增长规则时,将调用目标子资源的调用路径确定为资源泄漏调用路径。
实施本发明实施例,可获取目标代码运行时调用目标子资源的调用路径;确定目标子资源占用第一存储资源量的比例值,在判断到目标子资源占用第一存储资源量的比例值满足第二预设条件时,可则将调用目标子资源的调用路径确定为资源泄漏调用路径,从而可对调用路径进行跟踪,并可进一步检测确定为资源泄漏调用路径,从而可对资源泄漏进一步定位,提高了资源泄漏检测的精度,可在程序实际运行的在线环境进行资源泄漏检测,降低了漏报率,提高了资源泄漏的检测效率。
请参阅图3,图3为本发明第三实施例提供的一种资源泄漏检测方法的示意图。如图3所示,本发明实施例提供的方法可基于图1所示的方法来实现,具体的,可以在图1所示的步骤S104之后,可执行本发明实施例的步骤S301~S304。进一步可选的,本发明实施例提供的方法还可以与图2所示的第二实施例同步执行,或者先执行图3所示的第三实施例,再执行图2所示的第二实施例,具体实现方式不受本发明实施例的限制。
如图3所示,本发明实施例提供的资源泄漏检测方法可包括步骤S301~S304。本发明实施例中,目标代码的存储位置可以包括至少二个存储位置单元,其中,每一个存储位置单元中分别存储有子代码,至少二个存储位置单元中存储的子代码构成所述目标代码。其中:
S301,获取存储位置单元中存储的子代码运行时所调用的目标子资源;其中,至少二个存储位置单元中存储的子代码运行时所调用的目标子资源构成目标资源。
具体实现中,目标代码的存储位置具体可以包括:目标代码存储所在的文件和行号。可以根据文件或行号对目标代码进行分类,得到至少二个存储位置单元。进一步可选的,可对存储位置单元按一定的规则作映射,得到逻辑位置。例如,对一个目标代码,预设N个逻辑位置,编号为0,1,2,…,N-1,将表征目标代码存储位置的文件名和行号转换为整数,再相加(或相乘等其它操作),然后对N取模,将得到的结果作为逻辑位置号,从而可确定存储位置单元。进一步可选的,还可以结合其他维度如分配资源的大小来进一步划分存储位置单元,例如,可依据分配内存块的字节数划分成一定数目的块类型。
S302,确定存储位置单元中存储的子代码运行时所调用的目标子资源占用第一存储资源量的比例值。
具体实现中,可确定存储位置单元中存储的子代码运行时所调用的目标子资源占用第一存储资源量的比例值,例如,第一存储资源量为内存字节数1000kb,存储位置单元中存储的子代码运行时所调用的目标子资源占用第一存储资源量的比例值为20kb。
S303,判断所述比例值是否满足第三预设条件。其中,第三预设条件的设置以存储位置单元中存储的所述子代码运行时所调用的目标子资源占用第一存储资源量的比例值构成资源泄漏为准。
在S303的判断结果为是时,执行步骤S304,在S303的判断结果为否时,可返回执行步骤S301或者返回执行步骤S101。
进一步的,第三预设条件的设置以存储位置单元中存储的所述子代码运行时所调用的目标子资源占用第一存储资源量的比例值构成资源泄漏为准,第三预设条件可包括第三预设阈值或第三预设增长规则,其中,第三预设阈值的设置以使目标子资源占用所述第一存储资源量的比例值大于构成资源泄漏的目标子资源占用所述第一存储资源量的比例值的最低值为准;第三预设增长规则的设置以目标子资源占用第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,资源周期为目标资源占用存储空间的生命周期。进一步的,步骤S303判断所述比例值是否满足第三预设条件具体可以包括:
判断所述比例值是否大于第三预设阈值,若所述比例值大于第三预设阈值,确定所述比例值满足所述第三预设条件;或
判断所述比例值在资源周期内是否满足第三预设增长规则,其中,资源周期为第一存储资源量的占用周期;若所述比例值在资源周期内满足第三预设增长规则,确定所述比例值满足第三预设条件。
具体实现中,第三预设条件可以包括第三设阈值或第三预设增长规则,其中,第三预设阈值的设置以使目标子资源占用所述第一存储资源量的比例值大于构成资源泄漏的目标子资源占用所述第一存储资源量的比例值的最低值为准;第三预设增长规则的设置以目标子资源占用第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,资源周期为目标资源占用存储空间的生命周期进一步的,资源周期为第一存储资源量的占用周期,具体可以为对目标资源进行申请分配资源到释放资源结束之间的时间间隔。
本发明实施例中,可判断目所述比例值在资源周期内是否满足第三预设增长规则;若所述比例值在资源周期内满足第三预设增长规则,确定所述比例值满足第三预设条件。例如,可将每个资源周期的所述比例值作一增长变化曲线图,可通过增长变化曲线判断满足第三预设增长规则。具体实现中,可采用例如Mann-Kendall检验方法、线性回归、Sen斜率估计法等算法判断所述比例值在资源周期内是否满足第三预设增长规则。
S304,将存储位置单元确定为资源泄漏位置单元。
作为一种可选的实施方式,在S303的判断结果为是,即判断到所述比例值在资源周期内满足第三预设增长规则时,将存储位置单元确定为资源泄漏位置单元。
实施本发明实施例,目标代码的存储位置可包括至少二个存储位置单元,可存储位置单元中存储的子代码运行时所调用的目标子资源,确定存储位置单元中存储的子代码运行时所调用的目标子资源占用第一存储资源量的比例值,在判断到所述比例值满足第三预设条件时,将存储位置单元确定为资源泄漏位置单元,从而可对目标代码的存储位置中的存储位置单元进行跟踪,并可进一步检测确定为资源泄漏位置单元,从而可对资源泄漏进一步定位,提高了资源泄漏检测的精度,可在程序实际运行的在线环境进行资源泄漏检测,降低了漏报率,提高了资源泄漏的检测效率。
下面将结合附图4,分别对本发明实施例提供的资源泄漏检测装置进行详细介绍。
需要说明的是,附图4所示的资源泄漏检测装置,用于执行本发明图1~图3任一所示实施例的方法,为基于图1~图3任一所述的资源泄漏检测方法的执行主体。为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明图1~图3任一所示的实施例。本发明实施中的一种资源泄漏检测装置可以包括:智能手机、平板电脑、电脑、服务器等可运行程序的终端设备。
如图4所示,为本发明实施例提供的一种资源泄漏检测装置的结构示意图,本发明实施例提供的资源泄漏检测装置可以包括:第一获取模块401、第一确定模块402、第一判断模块403以及泄漏位置确定模块404。
第一获取模块401,用于获取程序的目标代码运行时所调用的目标资源;其中,目标代码为程序代码中的部分代码。
作为一种可选的实施方式,本发明实施例中的程序可以包括:例如Android操作***、Linux操作***等操作***,还可以包括安装于终端设备中的应用程序,还可以包括在终端设备中运行的进程等等,具体不受本发明实施例的限制。
进一步可选的,本发明实施例中程序的目标代码在运行过程中,会调用目标资源,目标资源例如内存、文件句柄、信号量、消息包、数据库连接池等,而程序的目标代码在运行结束后,需要及时释放所调用的目标资源。其中,目标代码为程序代码中的部分代码,目标代码为本发明实施例中需要进行泄漏检测的代码。
进一步的,程序代码可以包括多组目标代码,可以为程序代码在开发设计时根据功能模块、内存区间等类别对程序代码进行分类得到多组目标代码,例如,在程序为一个进程时,可根据程序代码的功能对程序代码进行划分,得到不同模块,每个模块对应一组目标代码,也可按程序代码的分配内存块大小对程序代码进行划分,得到的不同大小的内存区间,每个内存区间对应一组目标代码;在程序为Linux操作***的slab内存时,可根据不同的slab内存池对程序代码进行划分,得到多组目标代码。
进一步的,在程序代码包括多组目标代码时,可分别获取每组目标代码运行时所调用的目标资源,每组目标代码运行时所调用的目标资源之和构成程序代码运行时所调用的资源。
第一确定模块402,用于确定目标资源所占用的第一存储资源量。
作为一种可选的实施方式,目标资源所占用的第一存储资源量的初始值可设为0,在申请资源分配时,目标资源所占用的第一存储资源量=初始值+分配得到的资源量,在资源释放结束后,目标资源所占用的第一存储资源量=初始值+分配得到的资源量-释放的资源量,从而第一确定模块402可由初始值、分配得到的资源量、释放的资源量确定目标资源所占用的第一存储资源量。具体实现中,目标资源所占用的第一存储资源量可以是资源的个数或具体的度量大小,例如内存的字节数等。
第一判断模块403,用于判断目标资源所占用的第一存储资源量是否满足第一预设条件。第一预设条件为目标资源所占用的第一存储资源量符合资源泄漏条件。
作为一种可选的实施方式,目标资源所占用的第一存储资源量包括但不局限于:内存占用量、文件句柄占用量、信号量占用量、消息包占用量、数据库连接池占用量等,具体不受本发明实施例的限制。
进一步的,第一预设条件的设置以目标资源所占用的第一存储资源量构成资源泄漏为准,进一步的,第一预设条件包括第一预设阈值或第一预设增长规则,其中,第一预设阈值的设置以使第一存储资源量大于构成资源泄漏的第一存储资源量的最低值为准;第一预设增长规则的设置以第一存储资源量在资源周期内的增长趋势变化构成资源泄漏为准,其中,资源周期为目标资源占用存储空间的生命周期。第一判断模块403可以包括:第一判断子模块或第二判断子模块。
第一判断子模块,用于判断目标资源占用的第一存储资源量是否大于第一预设阈值,在第一判断子模块的判断结果为是时,确定第一判断模块403的判断结果为是。
第二判断子模块,用于目标资源占第一存储资源量在资源周期内是否第一预设增长规则,第二判断子模块的判断结果为是时,第一判断模块403的判断结果为是。
具体实现中,第一预设条件可以包括第一预设阈值或第一预设增长规则,其中,第一预设阈值的设置以使第一存储资源量大于构成资源泄漏的第一存储资源量的最低值为准;第一预设增长规则的设置以第一存储资源量在资源周期内的增长趋势变化构成资源泄漏为准,进一步的,资源周期为目标资源占用存储空间的生命周期,具体可以为对目标资源进行申请分配资源到释放资源结束之间的时间间隔。
本发明实施例中,第二判断子模块可判断目标资源占用的第一存储资源量在资源周期内是否满足第一预设增长规则;若目标资源占用的第一存储资源量在资源周期内满足第一预设增长规则,确定目标资源所占用的第一存储资源量满足第一预设条件。例如,可将每个资源周期的目标资源占用的第一存储资源量作一增长变化曲线图,可通过增长变化曲线判断满足第一预设增长规则。具体实现中,可采用例如Mann-Kendall检验方法、线性回归、Sen斜率估计法等算法判断目标资源占用的第一存储资源量在资源周期内是否满足第一预设增长规则,其中,Mann-Kendall检验方法为由Mann首先提出、由Kendall进一步改善的用于检测趋势的算法;线性回归为统计学中利用回归分析、基于线性函数建模变量之间定量关系的一种统计分析方法;Sen斜率估计法指由Henri Theil和Pranab K.Sen提出的斜率估计算法。
泄漏位置确定模块404,用于当第一判断模块403的判断结果为是时,将目标代码的存储位置确定为资源泄漏位置。
作为一种可选的实施方式,当第一判断模块403的判断结果为是时,即判断到目标资源所占用的第一存储资源量满足第一预设条件时,将目标代码的存储位置确定为资源泄漏位置。具体实现中,目标代码的存储位置具体可以包括:目标代码存储所在的文件和行号。
进一步可选的,在程序代码包括多组目标代码时,在满足第一预设条件的目标代码的组数(记为M)大于预设数量时(记为K,K可以为预先设定的程序中资源泄漏位置的最多数目),则可从满足第一预设条件的多组目标代码中确定K个目标代码的存储位置为资源泄漏位置,例如,预设数量为3,满足第一预设条件的目标代码的组数为5,则5大于3,满足第一预设条件的5组目标代码分别为:目标代码1、目标代码2、目标代码3、目标代码4和目标代码5,目标代码1运行时所调用目标资源1,目标资源1所占用的第一存储资源量为资源量1,目标代码2运行时所调用目标资源2,目标资源2所占用的第一存储资源量为资源量2,目标代码3运行时所调用目标资源3,目标资源3所占用的第一存储资源量为资源量3,目标代码4运行时所调用目标资源4,目标资源4所占用的第一存储资源量为资源量4,目标代码5运行时所调用目标资源5,目标资源5所占用的第一存储资源量为资源量5,则可比较资源量1、资源量2、资源量3、资源量4和资源量5的大小并进行大小排序,若比较结果为资源量5>资源量2>资源量4>资源量1>资源量3,则较大的预设数量个资源量为:资源量5、资源量2和资源量4,则可分别将资源量5、资源量2和资源量4对应的目标代码5、目标代码2和目标代码4的存储位置确定为资源泄漏位置。
进一步可选的,本发明实施例提供的装置还可以包括输出模块。
输出模块,用于输出资源泄漏检测结果信息。
具体实现中,资源泄漏检测结果信息包括:目标代码的属性信息、目标资源所占用的第一存储资源量、资源泄漏位置的信息、资源泄漏调用路径的信息、资源泄漏调用路径的资源占用数量信息。上述资源泄漏检测结果信息可在资源分配时进行记录。输出资源泄漏检测结果信息出,可提高对资源泄漏的定位的精准度,减小定位工作量和降低对定位人员的技能要求,且不再需要在实验室复现,提高了资源泄漏定位的效率。
进一步可选的,本发明实施例提供的资源泄漏检测装置还可以包括:第二获取模块405、第二确定模块406、第二判断模块407以及泄漏路径确定模块408。
第二获取模块405,用于获取目标代码运行时调用目标子资源的调用路径;目标资源包括至少二个目标子资源,其中,目标子资源是在运行目标代码过程中调用的目标资源中的部分资源。
具体实现中,调用路径可用函数调用栈表示,获取目标代码运行时调用目标子资源的调用路径,目标资源可包括至少二个目标子资源,其中,目标子资源是在运行目标代码过程中调用的目标资源中的部分资源。
进一步可选的,可将调用路径按一定的规则作映射,得到逻辑调用路径。例如,对泄漏位置确定模块404确定的资源泄漏位置,可依据资源分配的函数调用栈的层数划分一定数目的层类型,对每个层类型,预设M个逻辑调用路径,编号为0,1,2,…,M-1,取资源分配的函数调用栈的中间一层的返回地址转换为整数,再对M取模,将得到的结果作为逻辑调用路径号,则可获取目标代码运行时调用目标子资源的调用路径。
第二确定模块406,用于确定目标子资源占用第一存储资源量的比例值。
具体实现中,第二确定模块406可确定目标子资源占用第一存储资源量的比例值,例如,第一存储资源量为内存字节数1000kb,目标子资源占用第一存储资源量的比例值为200kb。
第二判断模块407,用于判断目标子资源占用第一存储资源量的比例值是否满足第二预设条件。其中,第二预设条件的设置以目标子资源占用第一存储资源量的比例值构成资源泄漏为准。
作为一种可选的实施方式,其中,第二预设条件的设置以目标子资源占用第一存储资源量的比例值构成资源泄漏为准。进一步,第二预设条件可以包括:第二预设阈值或第二预设增长规则,其中,第二预设阈值的设置以使第一存储资源量的比例值大于构成资源泄漏的目标子资源占用所述第一存储资源量的比例值的最低值为准;第二预设增长规则的设置以目标子资源占用第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,资源周期为目标资源占用存储空间的生命周期。进一步的,第二判断模块407可以包括:第三判断子模块或第四判断子模块。
第三判断子模块,用于判断目标子资源占用的第一存储资源量的比例值是否大于第二预设阈值,在第三判断子模块的判断结果为是时,确定第二判断模块407的判断结果为是。
第四判断子模块,判断目标子资源占用的第一存储资源量的比例值在资源周期内是否满足第二预设增长规则,在第四判断子模块的判断结果为是时,确定第二判断模块407的判断结果为是。
具体实现中,第二预设条件可以包括第二预设阈值或第二预设增长规则,其中,第二预设阈值的设置以使第一存储资源量的比例值大于构成资源泄漏的目标子资源占用所述第一存储资源量的比例值的最低值为准;第二预设增长规则的设置以目标子资源占用第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,资源周期为所述目标资源占用存储空间的生命周期,具体可以为对目标资源进行申请分配资源到释放资源结束之间的时间间隔。
本发明实施例中,第四判断子模块可判断目标子资源占用的第一存储资源量的比例值在资源周期内是否满足第二预设增长规则;若目标子资源占用的第一存储资源量的比例值在资源周期内满足第二预设增长规则,确定目标子资源占用第一存储资源量的比例值满足第二预设条件。例如,可将每个资源周期的目标子资源占用的第一存储资源量的比例值作一增长变化曲线图,可通过增长变化曲线判断满足第二预设增长规则。具体实现中,可采用例如Mann-Kendall检验方法、线性回归、Sen斜率估计法等算法判断目标子资源占用的第一存储资源量的比例值在资源周期内是否满足第二预设增长规则。
泄漏路径确定模块408,用于当第二判断模块407的判断结果为是时,将调用目标子资源的调用路径确定为资源泄漏调用路径。
作为一种可选的实施方式,在当第二判断模块407的判断结果为是时,即判断到目标子资源占用的第一存储资源量的比例值在资源周期内满足第二预设增长规则时,泄漏路径确定模块408将调用目标子资源的调用路径确定为资源泄漏调用路径。
进一步可选的,本发明实施例提供的资源泄漏检测装置还可以包括:第三获取模块409、第三确定模块410、第三判断模块411以及泄漏位置单元确定模块412。
其中,目标代码的存储位置包括至少二个存储位置单元,其中,每一个存储位置单元中分别存储有子代码,至少二个存储位置单元中存储的子代码构成所述目标代码。
第三获取模块409,用于获取存储位置单元中存储的子代码运行时所调用的目标子资源;其中,至少二个存储位置单元中存储的子代码运行时所调用的目标子资源构成目标资源。
具体实现中,目标代码的存储位置具体可以包括:目标代码存储所在的文件和行号。可以根据文件或行号对目标代码进行分类,得到至少二个存储位置单元。进一步可选的,可对存储位置单元按一定的规则作映射,得到逻辑位置。例如,对一个目标代码,预设N个逻辑位置,编号为0,1,2,…,N-1,将表征目标代码存储位置的文件名和行号转换为整数,再相加(或相乘等其它操作),然后对N取模,将得到的结果作为逻辑位置号,从而可确定存储位置单元。进一步可选的,还可以结合其他维度如分配资源的大小来进一步划分存储位置单元,例如,可依据分配内存块的字节数划分成一定数目的块类型。
第三确定模块410,用于确定存储位置单元中存储的子代码运行时所调用的目标子资源占用第一存储资源量的比例值。
具体实现中,第三确定模块410可确定存储位置单元中存储的子代码运行时所调用的目标子资源占用第一存储资源量的比例值,例如,第一存储资源量为内存字节数1000kb,存储位置单元中存储的子代码运行时所调用的目标子资源占用第一存储资源量的比例值为20kb。
第三判断模块411,用于判断所述比例值是否满足第三预设条件。其中,第三预设条件的设置以存储位置单元中存储的所述子代码运行时所调用的目标子资源占用第一存储资源量的比例值构成资源泄漏为准。
作为一种可选的实施方式,第三预设条件的设置以存储位置单元中存储的所述子代码运行时所调用的目标子资源占用第一存储资源量的比例值构成资源泄漏为准,进一步的,第三预设条件包括第三预设阈值或第三预设增长规则,其中,第三预设阈值的设置以使目标子资源占用所述第一存储资源量的比例值大于构成资源泄漏的目标子资源占用所述第一存储资源量的比例值的最低值为准;第三预设增长规则的设置以目标子资源占用第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,资源周期为目标资源占用存储空间的生命周期。第三判断模块411可以包括:第五判断子模块或第六判断子模块。
第五判断子模块,用于判断所述比例值是否大于第三预设阈值,在第五判断子模块的判断结果为是时,确定第三判断模块411的判断结果为是。
第六判断子模块,用于判断所述比例值在资源周期内是否满足第三预设增长规则,其中,资源周期为所述第一存储资源量的占用周期;在第六判断子模块的判断结果为是时,确定第三判断模块411的判断结果为是。
具体实现中,第三预设条件可以包括第三设阈值或第三预设增长规则,其中,第三预设阈值的设置以使目标子资源占用所述第一存储资源量的比例值大于构成资源泄漏的目标子资源占用所述第一存储资源量的比例值的最低值为准;第三预设增长规则的设置以目标子资源占用第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,资源周期为目标资源占用存储空间的生命周期,具体可以为对目标资源进行申请分配资源到释放资源结束之间的时间间隔。
本发明实施例中,第六判断子单元可判断目所述比例值在资源周期内是否满足第三预设增长规则;若所述比例值在资源周期内满足第三预设增长规则,确定所述比例值满足第三预设条件。例如,可将每个资源周期的所述比例值作一增长变化曲线图,可通过增长变化曲线判断满足第三预设增长规则。具体实现中,可采用例如Mann-Kendall检验方法、线性回归、Sen斜率估计法等算法判断所述比例值在资源周期内是否满足第三预设增长规则。
泄漏位置单元确定模块412,用于在第三判断模块411的判断结果为是时,将存储位置单元确定为资源泄漏位置单元。
作为一种可选的实施方式,在第三判断模块411的判断结果为是时,即判断到所述比例值在资源周期内满足第三预设增长规则时,泄漏位置单元确定模块412可将存储位置单元确定为资源泄漏位置单元。
实施本发明实施例,可获取程序的目标代码运行时所调用的目标资源,确定目标资源所占用的第一存储资源量,在判断到目标资源所占用的第一存储资源量满足第一预设条件时,可将目标代码的存储位置确定为资源泄漏位置,本发明实施例中,对程序的目标代码进行跟踪,其中,目标代码为程序代码中的部分代码,无需对程序的所有代码进行跟踪,仅需对目标代码运行时所调用的目标资源进行检测,无需跟踪所有的资源分配和释放,性能开销低,不影响正常的业务运行,从而可在程序实际运行的在线环境进行资源泄漏检测,降低开销,提高了资源泄漏的检测效率。
进一步地,不仅可以在程序的测试阶段或调试阶段进行泄漏检测,也可以在程序实际运行的在线环境进行泄漏检测,从而可以检测程序正式运行时出现的资源泄漏的问题。本发明实施例,可对程序的目标代码进行跟踪,可检测到资源泄漏位置,从而可提高资源泄漏检测的精度,可在程序实际运行的在线环境进行资源泄漏检测,降低了漏报率,提高了资源泄漏的检测效率。
进一步的,可获取目标代码运行时调用目标子资源的调用路径;确定目标子资源占用第一存储资源量的比例值,在判断到目标子资源占用第一存储资源量的比例值满足第二预设条件时,可则将调用目标子资源的调用路径确定为资源泄漏调用路径,从而可对调用路径进行跟踪,并可进一步检测确定为资源泄漏调用路径,从而可对资源泄漏进一步定位,提高了资源泄漏检测的精度。
进一步的,目标代码的存储位置可包括至少二个存储位置单元,可存储位置单元中存储的子代码运行时所调用的目标子资源,确定存储位置单元中存储的子代码运行时所调用的目标子资源占用第一存储资源量的比例值,在判断到所述比例值满足第三预设条件时,将存储位置单元确定为资源泄漏位置单元,从而可对目标代码的存储位置中的存储位置单元进行跟踪,并可进一步检测确定为资源泄漏位置单元,从而可对资源泄漏进一步定位,提高了资源泄漏检测的精。
需要说明的是,本实施例中的第一获取模块、第一确定模块、第一判断模块以及泄漏位置确定模块可以为单独设立的处理器,也可以集成在检测终端的某一个处理器中实现,此外,也可以以程序代码的形式存储于检测终端的存储器中,第二获取模块、第二确定模块、第二判断模块以及泄漏路径确定模块的实现同数据采集模块,在此不重复。第三获取模块、第三确定模块、第三判断模块以及泄漏位置单元确定模块的实现同数据采集模块,在此不重复。由检测终端的某一个处理器调用并执行以上模块的功能。这里所述的处理器可以是一个中央处理器(Central Processing Unit,CPU),或者是特定集成电路(Application Specific Integrated Circuit,ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路。
请参见图5,为本发明实施例提供的一种检测终端的结构示意图,其中,本实施例提供的检测终端与图1~图3任一所示的方法相对应,为基于图1~图3任一所示的检测资源泄漏的方法的执行主体。具体的实现形式如图5所示,本发明实施例的检测终端包括:接收机501、发射机502、存储器503和处理器504,其中,接收机501、发射机502、存储器503均和处理器504连接,例如,可以通过总线连接。当然,检测终端还可以包括天线、基带处理部件、中射频处理部件、输入输出装置等通用部件,具体不受本发明实施例的限制。
接收机501和发射机502可以集成在一起,构成收发机。
存储器503用于存储可执行程序代码,该程序代码包括计算机操作指令。存储器403可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
处理器504可以是一个中央处理器,或者是特定集成电路,或者是被配置成实施本发明实施例的一个或多个集成电路。
其中,存储器503中存储一组程序代码,且处理器504用于调用存储器503中存储的程序代码,执行以下操作:
获取程序的目标代码运行时所调用的目标资源;其中,目标代码为程序代码中的部分代码;
确定目标资源所占用的第一存储资源量;
判断目标资源所占用的第一存储资源量是否满足第一预设条件;第一预设条件的设置以目标资源所占用的第一存储资源量构成资源泄漏为准。
若目标资源所占用的第一存储资源量满足第一预设条件,将目标代码的存储位置确定为资源泄漏位置。
作为一种可选的实施方式,目标资源包括至少二个目标子资源,目标子资源是在运行目标代码过程中调用的目标资源中的部分资源,处理器504还用于:
获取目标代码运行时调用目标子资源的调用路径;
确定目标子资源占用第一存储资源量的比例值;
判断目标子资源占用第一存储资源量的比例值是否满足第二预设条件;第二预设条件的设置以目标子资源占用第一存储资源量的比例值构成资源泄漏为准;
若目标子资源占用第一存储资源量的比例值满足第二预设条件,则将调用目标子资源的调用路径确定为资源泄漏调用路径。
作为一种可选的实施方式,第一预设条件包括第一预设阈值或第一预设增长规则,第一预设阈值的设置以使第一存储资源量大于构成资源泄漏的第一存储资源量的最低值为准;第一预设增长规则的设置以第一存储资源量在资源周期内的增长趋势变化构成资源泄漏为准,其中,资源周期为目标资源占用存储空间的生命周期,其中,资源周期为目标资源占用存储空间的生命周期;处理器504判断目标资源所占用的第一存储资源量是否满足第一预设条件包括:
判断目标资源占用的第一存储资源量是否大于第一预设阈值,若目标资源占用的第一存储资源量大于第一预设阈值,确定目标资源所占用的第一存储资源量满足所述第一预设条件;或
判断目标资源占用的所述第一存储资源量在资源周期内是否满足第一预设增长规则;若目标资源占用的第一存储资源量在资源周期内满足第一预设增长规则,确定目标资源所占用的第一存储资源量满足第一预设条件。
作为一种可选的实施方式,第二预设条件包括:第二预设阈值或第二预设增长规则,第二预设阈值的设置以使第一存储资源量的比例值大于构成资源泄漏的目标子资源占用所述第一存储资源量的比例值的最低值为准;第二预设增长规则的设置以述目标子资源占用所述第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,资源周期为目标资源占用存储空间的生命周期,其中,资源周期为目标资源占用存储空间的生命周期;处理器504判断目标子资源占用第一存储资源量的比例值是否满足第二预设条件包括:
判断目标子资源占用的第一存储资源量的比例值是否大于第二预设阈值,若目标子资源占用的第一存储资源量的比例值大于第二预设阈值时,确定目标子资源占用所述第一存储资源量的比例值满足第二预设条件;或
判断目标子资源占用的第一存储资源量的比例值在资源周期内是否满足第二预设增长规则,若目标子资源占用的第一存储资源量的比例值在资源周期内满足第二预设增长规则,确定目标子资源占用第一存储资源量的比例值满足所述第二预设条件。
作为一种可选的实施方式,目标代码的存储位置包括至少二个存储位置单元,其中,每一个所述存储位置单元中分别存储有子代码,至少二个存储位置单元中存储的所述子代码构成目标代码,处理器504还用于:
获取存储位置单元中存储的子代码运行时所调用的目标子资源;其中,至少二个存储位置单元中存储的子代码运行时所调用的目标子资源构成目标资源;
确定存储位置单元中存储的子代码运行时所调用的目标子资源占用第一存储资源量的比例值;
判断所述比例值是否满足第三预设条件;第三预设条件的设置以存储位置单元中存储的子代码运行时所调用的目标子资源占用所述第一存储资源量的比例值构成资源泄漏为准;
若比例值满足第三预设条件,则将存储位置单元确定为资源泄漏位置单元。
作为一种可选的实施方式,第三预设条件包括第三预设阈值或第三预设增长规则,第三预设阈值的设置以使目标子资源占用第一存储资源量的比例值大于构成资源泄漏的目标子资源占用所述第一存储资源量的比例值的最低值为准;第三预设增长规则的设置以目标子资源占用第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,资源周期为所述目标资源占用存储空间的生命周期;处理器504判断所述比例值是否满足第三预设条件包括:
判断所述比例值是否大于所述第三预设阈值,若所述比例值大于第三预设阈值,确定所述比例值满足第三预设条件;或
判断所述比例值在资源周期内是否满足第三预设增长规则;若所述比例值在资源周期内满足第三预设增长规则,确定所述比例值满足第三预设条件
上述技术方案中,提供一种检测终端,包括接收机、发射机、存储器和处理器,处理器可获取程序的目标代码运行时所调用的目标资源,确定目标资源所占用的第一存储资源量,在判断到目标资源所占用的第一存储资源量满足第一预设条件时,可将目标代码的存储位置确定为资源泄漏位置,从而可对程序的目标代码进行跟踪,并可进一步检测将目标代码的存储位置确定为资源泄漏位置,无需跟踪所有的资源分配和释放,从而可降低性能开销。
进一步地,不仅可以在程序的测试阶段或调试阶段进行泄漏检测,也可以在程序实际运行的在线环境进行泄漏检测,从而可以检测程序正式运行时出现的资源泄漏的问题。本发明实施例,可对程序的目标代码进行跟踪,可检测到资源泄漏位置,从而可提高资源泄漏检测的精度,可在程序实际运行的在线环境进行资源泄漏检测,降低了漏报率,提高了资源泄漏的检测效率。
请参见图6,为本发明实施例提供的一种资源泄漏检测***的结构示意图,如图所示,本发明实施例还提供的一种资源泄漏检测***可以包括:存储器601、资源泄漏检测装置602以及显示装置603。其中,存储器601,用于存储资源泄漏检测程序;资源泄漏检测装置602,用于运行存储器601中存储的资源泄漏检测程序,以执行图1~3任一所示任的资源泄漏检测方法;显示装置603,用于显示资源泄漏检测装置获得的资源泄漏检测结果。进一步的,显示装置603可包括显示面板,例如可以采用LCD(Liquid Crystal Display,液晶显示器)、OLED(Organic Light-Emitting Diode,有机发光二极管)等形式配置显示面板,进一步的,显示装置603显示资源泄漏检测装置获得的资源泄漏检测结果可包括:资源泄漏位置、资源泄漏调用路径或资源泄漏位置单元等。其中,资源泄漏检测装置602的结构和功能可参见图4所示实施例的相关描述,在此不赘述。需要说明的是,本实施例提供的装置与图1~3任一所示的资源泄漏检测方法相对应。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或模块可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置、模块或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
作为分离部件说明的模块或单元可以是或者也可以不是物理上分开的,作为模块或单元显示的部件可以是或者也可以不是物理模块或单元,即可以位于一个地方,或者也可以分布到多个网络模块或单元上。可以根据实际的需要选择其中的部分或者全部模块或单元来实现本申请实施例方案的目的。
另外,在本申请各个实施例中的各功能模块或单元可以集成在一个处理模块或单元中,也可以是各个模块或单元单独物理存在,也可以是两个或两个以上模块或单元集成在一个模块或单元中。上述集成的模块或单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的模块或单元如果以软件功能模块或单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。

Claims (16)

1.一种资源泄漏检测方法,其特征在于,所述方法包括:
获取程序的目标代码运行时所调用的目标资源;其中,所述目标代码为程序代码中的部分代码;
确定所述目标资源所占用的第一存储资源量;
判断所述目标资源所占用的第一存储资源量是否满足第一预设条件;所述第一预设条件的设置以所述目标资源所占用的第一存储资源量构成资源泄漏为准;
若所述目标资源所占用的第一存储资源量满足第一预设条件,将所述目标代码的存储位置确定为资源泄漏位置;
其中,所述目标资源包括至少二个目标子资源,所述目标子资源是在运行所述目标代码过程中调用的所述目标资源中的部分资源;所述方法还包括:
获取所述目标代码运行时调用所述目标子资源的调用路径;
确定所述目标子资源占用所述第一存储资源量的比例值;
判断所述目标子资源占用所述第一存储资源量的比例值是否满足第二预设条件;所述第二预设条件的设置以所述目标子资源占用所述第一存储资源量的比例值构成资源泄漏为准;
若所述目标子资源占用所述第一存储资源量的比例值满足第二预设条件,则将调用所述目标子资源的调用路径确定为资源泄漏调用路径。
2.如权利要求1所述的方法,其特征在于,所述第一预设条件包括第一预设阈值或第一预设增长规则,所述第一预设阈值的设置以使所述第一存储资源量大于构成资源泄漏的所述第一存储资源量的最低值为准;所述第一预设增长规则的设置以所述第一存储资源量在资源周期内的增长趋势变化构成资源泄漏为准,其中,所述资源周期为所述目标资源占用存储空间的生命周期;
所述判断所述目标资源所占用的第一存储资源量是否满足第一预设条件包括:
判断所述目标资源占用的所述第一存储资源量是否大于所述第一预设阈值,若所述目标资源占用的所述第一存储资源量大于所述第一预设阈值,确定所述目标资源所占用的第一存储资源量满足所述第一预设条件;或
判断所述目标资源占用的所述第一存储资源量在资源周期内是否满足所述第一预设增长规则;若所述目标资源占用的所述第一存储资源量在资源周期内满足所述第一预设增长规则,确定所述目标资源所占用的第一存储资源量满足所述第一预设条件。
3.如权利要求1所述的方法,其特征在于,所述第二预设条件包括:第二预设阈值或第二预设增长规则,所述第二预设阈值的设置以使所述第一存储资源量的比例值大于构成资源泄漏的所述目标子资源占用所述第一存储资源量的比例值的最低值为准;所述第二预设增长规则的设置以所述目标子资源占用所述第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,所述资源周期为所述目标资源占用存储空间的生命周期;
所述判断所述目标子资源占用所述第一存储资源量的比例值是否满足第二预设条件包括:
判断所述目标子资源占用的所述第一存储资源量的比例值是否大于所述第二预设阈值,若所述目标子资源占用的所述第一存储资源量的比例值大于所述第二预设阈值时,确定所述目标子资源占用所述第一存储资源量的比例值满足所述第二预设条件;或
判断所述目标子资源占用的所述第一存储资源量的比例值在资源周期内是否满足所述第二预设增长规则,若所述目标子资源占用的所述第一存储资源量的比例值在资源周期内满足所述第二预设增长规则,确定所述目标子资源占用所述第一存储资源量的比例值满足所述第二预设条件。
4.如权利要求1所述的方法,其特征在于,所述目标代码的存储位置包括至少二个存储位置单元,其中,每一个所述存储位置单元中分别存储有子代码,所述至少二个存储位置单元中存储的所述子代码构成所述目标代码,所述方法还包括:
获取所述存储位置单元中存储的所述子代码运行时所调用的目标子资源;其中,所述至少二个存储位置单元中存储的所述子代码运行时所调用的目标子资源构成所述目标资源;
确定所述存储位置单元中存储的所述子代码运行时所调用的目标子资源占用所述第一存储资源量的比例值;
判断所述比例值是否满足第三预设条件;所述第三预设条件的设置以所述存储位置单元中存储的所述子代码运行时所调用的目标子资源占用所述第一存储资源量的比例值构成资源泄漏为准;
若所述比例值满足第三预设条件,则将所述存储位置单元确定为资源泄漏位置单元。
5.如权利要求4所述的方法,其特征在于,所述第三预设条件包括第三预设阈值或第三预设增长规则,所述第三预设阈值的设置以使所述目标子资源占用所述第一存储资源量的比例值大于构成资源泄漏的所述目标子资源占用所述第一存储资源量的比例值的最低值为准;所述第三预设增长规则的设置以所述目标子资源占用所述第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,所述资源周期为所述目标资源占用存储空间的生命周期;
所述判断所述比例值是否满足第三预设条件包括:
判断所述比例值是否大于所述第三预设阈值,若所述比例值大于所述第三预设阈值,确定所述比例值满足所述第三预设条件;或
判断所述比例值在资源周期内是否满足所述第三预设增长规则;若所述比例值在资源周期内满足所述第三预设增长规则,确定所述比例值满足所述第三预设条件。
6.一种资源泄漏检测方法,其特征在于,所述方法包括:
获取程序的目标代码运行时所调用的目标资源;其中,所述目标代码为程序代码中的部分代码;
确定所述目标资源所占用的第一存储资源量;
判断所述目标资源所占用的第一存储资源量是否满足第一预设条件;所述第一预设条件的设置以所述目标资源所占用的第一存储资源量构成资源泄漏为准;
若所述目标资源所占用的第一存储资源量满足第一预设条件,将所述目标代码的存储位置确定为资源泄漏位置;
其中,
所述目标代码的存储位置包括至少二个存储位置单元,其中,每一个所述存储位置单元中分别存储有子代码,所述至少二个存储位置单元中存储的所述子代码构成所述目标代码,所述方法还包括:
获取所述存储位置单元中存储的所述子代码运行时所调用的目标子资源;其中,所述至少二个存储位置单元中存储的所述子代码运行时所调用的目标子资源构成所述目标资源;
确定所述存储位置单元中存储的所述子代码运行时所调用的目标子资源占用所述第一存储资源量的比例值;
判断所述比例值是否满足第三预设条件;所述第三预设条件的设置以所述存储位置单元中存储的所述子代码运行时所调用的目标子资源占用所述第一存储资源量的比例值构成资源泄漏为准;
若所述比例值满足第三预设条件,则将所述存储位置单元确定为资源泄漏位置单元。
7.如权利要求6所述的方法,其特征在于,所述第三预设条件包括第三预设阈值或第三预设增长规则,所述第三预设阈值的设置以使所述目标子资源占用所述第一存储资源量的比例值大于构成资源泄漏的所述目标子资源占用所述第一存储资源量的比例值的最低值为准;所述第三预设增长规则的设置以所述目标子资源占用所述第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,所述资源周期为所述目标资源占用存储空间的生命周期;
所述判断所述比例值是否满足第三预设条件包括:
判断所述比例值是否大于所述第三预设阈值,若所述比例值大于所述第三预设阈值,确定所述比例值满足所述第三预设条件;或
判断所述比例值在资源周期内是否满足所述第三预设增长规则;若所述比例值在资源周期内满足所述第三预设增长规则,确定所述比例值满足所述第三预设条件。
8.一种资源泄漏检测装置,其特征在于,所述装置包括:
第一获取模块,用于获取程序的目标代码运行时所调用的目标资源;其中,所述目标代码为程序代码中的部分代码;
第一确定模块,用于确定所述目标资源所占用的第一存储资源量;
第一判断模块,用于判断所述目标资源所占用的第一存储资源量是否满足第一预设条件;所述第一预设条件的设置以所述目标资源所占用的第一存储资源量构成资源泄漏为准;
泄漏位置确定模块,用于当所述第一判断模块的判断结果为是时,将所述目标代码的存储位置确定为资源泄漏位置;
其中,所述目标资源包括至少二个目标子资源,所述目标子资源是在运行所述目标代码过程中调用的所述目标资源中的部分资源;所述装置还包括:
第二获取模块,用于获取所述目标代码运行时调用所述目标子资源的调用路径;
第二确定模块,用于确定所述目标子资源占用所述第一存储资源量的比例值;
第二判断模块,用于判断所述目标子资源占用所述第一存储资源量的比例值是否满足第二预设条件;所述第二预设条件的设置以所述目标子资源占用所述第一存储资源量的比例值构成资源泄漏为准;
泄漏路径确定模块,用于当所述第二判断模块的判断结果为是时,将调用所述目标子资源的调用路径确定为资源泄漏调用路径。
9.如权利要求8所述的装置,其特征在于,所述第一预设条件包括第一预设阈值或第一预设增长规则,所述第一预设阈值的设置以使所述第一存储资源量大于构成资源泄漏的所述第一存储资源量的最低值为准;所述第一预设增长规则的设置以所述第一存储资源量在资源周期内的增长趋势变化构成资源泄漏为准,其中,所述资源周期为所述目标资源占用存储空间的生命周期;
所述第一判断模块包括:第一判断子模块或第二判断子模块;
所述第一判断子模块,用于判断所述目标资源占用的所述第一存储资源量是否大于所述第一预设阈值,在所述第一判断子模块的判断结果为是时,确定所述第一判断模块的判断结果为是;
所述第二判断子模块,用于判断所述目标资源占用的所述第一存储资源量在资源周期内是否满足所述第一预设增长规则;在所述第二判断子模块的判断结果为是时,确定所述第一判断模块的判断结果为是。
10.如权利要求8所述的装置,其特征在于,所述第二预设条件包括:第二预设阈值或第二预设增长规则,所述第二预设阈值的设置以使所述第一存储资源量的比例值大于构成资源泄漏的所述目标子资源占用所述第一存储资源量的比例值的最低值为准;所述第二预设增长规则的设置以所述目标子资源占用所述第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,所述资源周期为所述目标资源占用存储空间的生命周期;
所述第二判断模块包括:第三判断子模块或第四判断子模块;
所述第三判断子模块,用于判断所述目标子资源占用的所述第一存储资源量的比例值是否大于所述第二预设阈值,在所述第三判断子模块的判断结果为是时,确定所述第二判断模块的判断结果为是;
所述第四判断子模块,判断所述目标子资源占用的所述第一存储资源量的比例值在资源周期内是否满足所述第二预设增长规则,在所述第四判断子模块的判断结果为是时,确定所述第二判断模块的判断结果为是。
11.如权利要求8所述的装置,其特征在于,所述目标代码的存储位置包括至少二个存储位置单元,其中,每一个所述存储位置单元中分别存储有子代码,所述至少二个存储位置单元中存储的所述子代码构成所述目标代码,所述装置还包括:
第三获取模块,用于获取所述存储位置单元中存储的所述子代码运行时所调用的目标子资源;其中,所述至少二个存储位置单元中存储的所述子代码运行时所调用的目标子资源构成所述目标资源;
第三确定模块,用于确定所述存储位置单元中存储的所述子代码运行时所调用的目标子资源占用所述第一存储资源量的比例值;
第三判断模块,用于判断所述比例值是否满足第三预设条件;所述第三预设条件的设置以所述存储位置单元中存储的所述子代码运行时所调用的目标子资源占用所述第一存储资源量的比例值构成资源泄漏为准;
泄漏位置单元确定模块,用于在所述第三判断模块的判断结果为是时,将所述存储位置单元确定为资源泄漏位置单元。
12.如权利要求11所述的装置,其特征在于,所述第三预设条件包括第三预设阈值或第三预设增长规则,所述第三预设阈值的设置以使所述目标子资源占用所述第一存储资源量的比例值大于构成资源泄漏的所述目标子资源占用所述第一存储资源量的比例值的最低值为准;所述第三预设增长规则的设置以所述目标子资源占用所述第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,所述资源周期为所述目标资源占用存储空间的生命周期;
所述第三判断模块包括:第五判断子模块或第六判断子模块;
所述第五判断子模块,用于判断所述比例值是否大于所述第三预设阈值,在所述第五判断子模块的判断结果为是时,确定所述第三判断模块的判断结果为是;
所述第六判断子模块,用于判断所述比例值在资源周期内是否满足所述第三预设增长规则,其中,所述资源周期为所述第一存储资源量的占用周期;在所述第六判断子模块的判断结果为是时,确定所述第三判断模块的判断结果为是。
13.一种资源泄漏检测装置,其特征在于,所述装置包括:
第一获取模块,用于获取程序的目标代码运行时所调用的目标资源;其中,所述目标代码为程序代码中的部分代码;
第一确定模块,用于确定所述目标资源所占用的第一存储资源量;
第一判断模块,用于判断所述目标资源所占用的第一存储资源量是否满足第一预设条件;所述第一预设条件的设置以所述目标资源所占用的第一存储资源量构成资源泄漏为准;
泄漏位置确定模块,用于当所述第一判断模块的判断结果为是时,将所述目标代码的存储位置确定为资源泄漏位置;
其中,
所述目标代码的存储位置包括至少二个存储位置单元,其中,每一个所述存储位置单元中分别存储有子代码,所述至少二个存储位置单元中存储的所述子代码构成所述目标代码,所述装置还包括:
第三获取模块,用于获取所述存储位置单元中存储的所述子代码运行时所调用的目标子资源;其中,所述至少二个存储位置单元中存储的所述子代码运行时所调用的目标子资源构成所述目标资源;
第三确定模块,用于确定所述存储位置单元中存储的所述子代码运行时所调用的目标子资源占用所述第一存储资源量的比例值;
第三判断模块,用于判断所述比例值是否满足第三预设条件;所述第三预设条件的设置以所述存储位置单元中存储的所述子代码运行时所调用的目标子资源占用所述第一存储资源量的比例值构成资源泄漏为准;
泄漏位置单元确定模块,用于在所述第三判断模块的判断结果为是时,将所述存储位置单元确定为资源泄漏位置单元。
14.如权利要求13所述的装置,其特征在于,所述第三预设条件包括第三预设阈值或第三预设增长规则,所述第三预设阈值的设置以使所述目标子资源占用所述第一存储资源量的比例值大于构成资源泄漏的所述目标子资源占用所述第一存储资源量的比例值的最低值为准;所述第三预设增长规则的设置以所述目标子资源占用所述第一存储资源量的比例值在资源周期内的增长趋势变化构成资源泄漏为准,其中,所述资源周期为所述目标资源占用存储空间的生命周期;
所述第三判断模块包括:第五判断子模块或第六判断子模块;
所述第五判断子模块,用于判断所述比例值是否大于所述第三预设阈值,在所述第五判断子模块的判断结果为是时,确定所述第三判断模块的判断结果为是;
所述第六判断子模块,用于判断所述比例值在资源周期内是否满足所述第三预设增长规则,其中,所述资源周期为所述第一存储资源量的占用周期;在所述第六判断子模块的判断结果为是时,确定所述第三判断模块的判断结果为是。
15.一种资源泄漏检测***,其特征在于,所述***包括存储器、资源泄漏检测装置以及显示装置,其中,
所述存储器,用于存储资源泄漏检测程序;
所述资源泄漏检测装置,用于运行所述存储器中存储的所述资源泄漏检测程序,以执行权利要求1~7任意一项所述的资源泄漏检测方法;
所述显示装置,用于显示所述资源泄漏检测装置获得的资源泄漏检测结果。
16.一种计算机可读取存储介质,其特征在于,所述计算机可读取存储介质存储有计算机软件产品,所述计算机软件产品包括的若干指令,用以使得一台计算机设备执行权利要求1~7任意一项所述的资源泄漏检测方法。
CN201410425600.2A 2014-08-26 2014-08-26 一种资源泄漏检测方法、装置及*** Active CN105446871B (zh)

Priority Applications (5)

Application Number Priority Date Filing Date Title
CN201410425600.2A CN105446871B (zh) 2014-08-26 2014-08-26 一种资源泄漏检测方法、装置及***
PCT/CN2015/079872 WO2016029723A1 (zh) 2014-08-26 2015-05-27 一种资源泄漏检测方法、装置及***
EP15834959.7A EP3171274B1 (en) 2014-08-26 2015-05-27 Resource leak detecting method and apparatus
JP2017511234A JP6446125B2 (ja) 2014-08-26 2015-05-27 リソースリーク検出の方法、装置及びシステム
US15/441,837 US10289472B2 (en) 2014-08-26 2017-02-24 Resource leak detection method, apparatus, and system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410425600.2A CN105446871B (zh) 2014-08-26 2014-08-26 一种资源泄漏检测方法、装置及***

Publications (2)

Publication Number Publication Date
CN105446871A CN105446871A (zh) 2016-03-30
CN105446871B true CN105446871B (zh) 2018-08-17

Family

ID=55398725

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410425600.2A Active CN105446871B (zh) 2014-08-26 2014-08-26 一种资源泄漏检测方法、装置及***

Country Status (5)

Country Link
US (1) US10289472B2 (zh)
EP (1) EP3171274B1 (zh)
JP (1) JP6446125B2 (zh)
CN (1) CN105446871B (zh)
WO (1) WO2016029723A1 (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108073441B (zh) * 2016-11-14 2022-05-10 阿里巴巴集团控股有限公司 一种虚拟机内存监管方法与设备
CN107423213B (zh) * 2017-04-11 2020-12-18 腾讯科技(深圳)有限公司 一种文件描述符分配检测方法和装置
CN107957950B (zh) * 2017-12-08 2020-08-25 锐捷网络股份有限公司 一种***资源泄露的检测方法和装置
US20190188154A1 (en) * 2017-12-15 2019-06-20 Intel Corporation Translation pinning in translation lookaside buffers
CN110837465A (zh) * 2019-10-15 2020-02-25 珠海金山网络游戏科技有限公司 一种基于Android的句柄泄露检测方法及其***
CN112181830B (zh) * 2020-09-28 2022-08-09 厦门美柚股份有限公司 内存泄露的检测方法、装置、终端及介质
CN112631941B (zh) * 2020-12-31 2022-04-19 广州鲁邦通物联网科技股份有限公司 定位linux内核slub内存泄漏的方法和***

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101162436A (zh) * 2006-10-13 2008-04-16 中兴通讯股份有限公司 一种通信设备***中内存泄漏的检测方法
CN101908018A (zh) * 2010-07-20 2010-12-08 北京海泰方圆科技有限公司 一种判断内存泄露的***及方法
CN103268278A (zh) * 2013-06-14 2013-08-28 苏州国芯科技有限公司 支持多核处理器的sram控制器及其跟踪信息处理方法
CN103914376A (zh) * 2014-03-12 2014-07-09 汉柏科技有限公司 一种内存泄露的快速定位方法

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001331368A (ja) * 2000-05-19 2001-11-30 Oki Electric Ind Co Ltd メモリ解放漏れ判定方法
CN1248114C (zh) 2002-06-20 2006-03-29 华为技术有限公司 一种软件内存泄露的检查方法
JP4512402B2 (ja) * 2004-04-12 2010-07-28 株式会社日立製作所 メモリリークの原因箇所検出方法、及びその実行プログラム
US7774741B2 (en) * 2006-05-22 2010-08-10 Microsoft Corporation Automatically resource leak diagnosis and detecting process within the operating system
US8037477B2 (en) * 2007-01-23 2011-10-11 Hewlett-Packard Development Company, L.P. Efficient detection of sources of increasing memory consumption
CN101539870A (zh) 2008-03-21 2009-09-23 中兴通讯股份有限公司 内存泄漏检测装置及方法
CN101615143B (zh) 2008-06-27 2013-04-17 国际商业机器公司 用于内存泄漏诊断的方法和装置
US8689180B2 (en) * 2009-11-03 2014-04-01 International Business Machines Corporation Systems and methods for resource leak detection
US8467281B1 (en) 2010-09-17 2013-06-18 Emc Corporation Techniques for identifying devices having slow response times
US9064048B2 (en) * 2011-02-17 2015-06-23 Red Hat, Inc. Memory leak detection
US20130145220A1 (en) * 2011-03-15 2013-06-06 Telefonaktiebolaget L M Ericsson (Publ) Detection on Resource Leakage
US20130021176A1 (en) * 2011-07-18 2013-01-24 Belkin Internaitonal, Inc. Method of Handling Incoming Telephone Calls and Text Messages and Systems Therefor
US8881107B2 (en) * 2011-08-24 2014-11-04 Microsoft Corporation Automatic memory leak detection
CN102955719B (zh) 2011-08-31 2016-06-22 国际商业机器公司 疑似内存泄漏的确定方法及装置
US8626993B2 (en) 2011-11-18 2014-01-07 Apple Inc. Method for tracking memory usages of a data processing system
US9104563B2 (en) * 2012-02-09 2015-08-11 Microsoft Technology Licensing, Llc Self-tuning statistical resource leak detection
JP2014149606A (ja) 2013-01-31 2014-08-21 Fujitsu Ltd 資源使用量集計プログラム、資源使用量集計方法及び資源使用量集計装置
CN103268287B (zh) * 2013-06-05 2017-03-15 福州瑞芯微电子股份有限公司 检测内存泄露的方法与装置
CN103488544B (zh) 2013-09-26 2016-08-17 华为技术有限公司 检测慢盘的处理方法和装置
CN103810062B (zh) 2014-03-05 2015-12-30 华为技术有限公司 慢盘检测方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101162436A (zh) * 2006-10-13 2008-04-16 中兴通讯股份有限公司 一种通信设备***中内存泄漏的检测方法
CN101908018A (zh) * 2010-07-20 2010-12-08 北京海泰方圆科技有限公司 一种判断内存泄露的***及方法
CN103268278A (zh) * 2013-06-14 2013-08-28 苏州国芯科技有限公司 支持多核处理器的sram控制器及其跟踪信息处理方法
CN103914376A (zh) * 2014-03-12 2014-07-09 汉柏科技有限公司 一种内存泄露的快速定位方法

Also Published As

Publication number Publication date
JP6446125B2 (ja) 2018-12-26
CN105446871A (zh) 2016-03-30
US10289472B2 (en) 2019-05-14
JP2017531852A (ja) 2017-10-26
EP3171274A1 (en) 2017-05-24
EP3171274A4 (en) 2017-08-02
EP3171274B1 (en) 2019-07-10
WO2016029723A1 (zh) 2016-03-03
US20170168886A1 (en) 2017-06-15

Similar Documents

Publication Publication Date Title
CN105446871B (zh) 一种资源泄漏检测方法、装置及***
CN107688526A (zh) 应用程序的性能测试方法、装置、计算机设备和存储介质
CN100465920C (zh) 多节点计算机中存储器分配的方法和装置
US7418568B2 (en) Memory management technique
CN102868573A (zh) Web服务负载云测试方法和装置
CN105740122A (zh) 一种手机内存泄漏的监测方法及监测***
US20200236169A1 (en) Cloud platform or cloud provider selection
CN101515242B (zh) 一种查找改写内存的任务的方法和***
CN110389817B (zh) 多云***的调度方法、装置和计算机可读介质
CN111752987A (zh) 一种数据库访问方法、装置、存储介质和计算机设备
CN109558315A (zh) 测试范围的确定方法、装置及设备
CN109829678A (zh) 一种回滚处理方法、装置以及电子设备
CN106202374A (zh) 一种数据处理方法及装置
CN110888809A (zh) 一种测试任务的风险预测方法及装置
CN109947656A (zh) 一种测试用例管理方法及装置
CN108418730A (zh) 网络流量测试方法、装置、设备以及计算机可读存储介质
CN110083510A (zh) 边缘节点测试方法、电子设备、***及介质
CN108536759A (zh) 一种样本回放数据存取方法及装置
CN110018814A (zh) 唯一标示符提供方法、存储介质、电子设备及***
CN101201751B (zh) 针对联机事务处理应用的跨机型容量规划方法
US11934291B2 (en) Measurement of parallelism in multicore processors
CN117573371B (zh) 一种对于基于图形处理器运行的服务的调度方法和装置
CN104484155B (zh) 一种虚拟化平台下下发指令的方法和装置
CN117370135B (zh) 基于电力应用弹性测试的超算平台性能评测方法及***
CN113010269B (zh) 一种虚拟机调度方法、装置、电子设备及可读存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant