[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

CN112416733B - 一种内存检测方法、内存检测装置及智能设备 - Google Patents

一种内存检测方法、内存检测装置及智能设备 Download PDF

Info

Publication number
CN112416733B
CN112416733B CN201910769027.XA CN201910769027A CN112416733B CN 112416733 B CN112416733 B CN 112416733B CN 201910769027 A CN201910769027 A CN 201910769027A CN 112416733 B CN112416733 B CN 112416733B
Authority
CN
China
Prior art keywords
memory
detected
heap dump
target
heap
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
CN201910769027.XA
Other languages
English (en)
Other versions
CN112416733A (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.)
Jiujiang Youbixing Technology Co ltd
Original Assignee
Shenzhen Ubtech Technology 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 Shenzhen Ubtech Technology Co ltd filed Critical Shenzhen Ubtech Technology Co ltd
Priority to CN201910769027.XA priority Critical patent/CN112416733B/zh
Publication of CN112416733A publication Critical patent/CN112416733A/zh
Application granted granted Critical
Publication of CN112416733B publication Critical patent/CN112416733B/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/36Prevention of errors by analysis, debugging or testing of software
    • G06F11/362Debugging of software
    • G06F11/366Debugging of software using diagnostics
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请公开了一种内存检测方法、内存检测装置、智能设备及计算机可读存储介质,其中,该内存检测方法包括:在待检测进程启动时,记录所述待检测进程的初始内存总量,并触发所述待检测进程的堆转储操作,以得到堆转储文件;在所述待检测进程启动后,实时扫描待检测进程当前的内存总量;当所述待检测进程当前的内存总量与前次进行堆转储操作时的所述待检测进程的内存总量的差值超过预设的差值阈值时,触发所述待检测进程的堆转储操作,以得到堆转储文件;对所得到的堆转储文件进行分析;根据分析结果确定所述待检测进程的内存状况。通过本申请方案,可以实现用户无感知的内存检测操作,提升了进程内存泄露的检测效率。

Description

一种内存检测方法、内存检测装置及智能设备
技术领域
本申请属于测试技术领域,尤其涉及一种内存检测方法、内存检测装置、智能设备及计算机可读存储介质。
背景技术
随着机器人产业的快速发展,机器人需要搭载多种应用程序来执行相应的业务功能,以满足用户的需求。而当机器人等智能设备所搭载的应用程序数量过多时,很容易出现进程内存泄漏的问题。传统的进程内存泄漏的检测办法一般都是在线检测,也即需要检测设备实时与智能设备进行连接。这种检测方法的检测过程较为繁琐,需要耗费大量时间,导致检测效率不高。
发明内容
有鉴于此,本申请提供了一种内存检测方法、内存检测装置、智能设备及计算机可读存储介质,可提升进程内存泄露的检测效率。
本申请的第一方面提供了一种内存检测方法,包括:
在待检测进程启动时,记录上述待检测进程的初始内存总量,并触发上述待检测进程的堆转储操作,以得到堆转储文件;
在上述待检测进程启动后,实时扫描待检测进程当前的内存总量;
当上述待检测进程当前的内存总量与前次进行堆转储操作时的上述待检测进程的内存总量的差值超过预设的差值阈值时,触发上述待检测进程的堆转储操作,以得到堆转储文件;
对所得到的堆转储文件进行分析;
根据分析结果确定上述待检测进程的内存状况。
本申请的第二方面提供了一种内存检测装置,包括:
记录单元,用于在待检测进程启动时,记录上述待检测进程的初始内存总量;
堆转储单元,用于在待检测进程启动时,触发上述待检测进程的堆转储操作,以得到堆转储文件;
扫描单元,用于在上述待检测进程启动后,实时扫描待检测进程当前的内存总量;
上述堆转储单元,还用于当上述待检测进程当前的内存总量与前次进行堆转储操作时的上述待检测进程的内存总量的差值超过预设的差值阈值时,触发上述待检测进程的堆转储操作,以得到堆转储文件;
分析单元,用于对所得到的堆转储文件进行分析;
确定单元,用于根据分析结果确定上述待检测进程的内存状况。
本申请的第三方面提供了一种智能设备,上述智能设备包括存储器、处理器以及存储在上述存储器中并可在上述处理器上运行的计算机程序,上述处理器执行上述计算机程序时实现如上述第一方面的方法的步骤。
本申请的第四方面提供了一种计算机可读存储介质,上述计算机可读存储介质存储有计算机程序,上述计算机程序被处理器执行时实现如上述第一方面的方法的步骤。
本申请的第五方面提供了一种计算机程序产品,上述计算机程序产品包括计算机程序,上述计算机程序被一个或多个处理器执行时实现如上述第一方面的方法的步骤。
由上可见,在本申请方案中,在待检测进程启动时,记录上述待检测进程的初始内存总量,并触发上述待检测进程的堆转储操作,以得到堆转储文件,在上述待检测进程启动后,实时扫描待检测进程当前的内存总量,当上述待检测进程当前的内存总量与前次进行堆转储操作时的上述待检测进程的内存总量的差值超过预设的差值阈值时,触发上述待检测进程的堆转储操作,以得到堆转储文件,随后对所得到的堆转储文件进行分析,最后根据分析结果确定上述待检测进程的内存状况。通过本申请方案,不再需要将智能设备与外部检测设备相连接,可以实现用户无感知的内存检测操作,提升了进程内存泄露的检测效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的内存检测方法的实现流程示意图;
图2是本申请实施例提供的内存检测方法所提出的内存曲线图的示例图;
图3是本申请实施例提供的内存检测装置的结构框图;
图4是本申请实施例提供的智能设备的示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
本发明实施例的一种内存检测方法、内存检测装置及智能设备可应用于机器人、智能手机、平板电脑等智能产品中,为了说明本申请上述的技术方案,下面通过具体实施例来进行说明。
实施例一
下面对本申请实施例提供的一种内存检测方法进行描述,请参阅图1,本申请实施例中的内存检测方法包括:
在步骤101中,在待检测进程启动时,记录上述待检测进程的初始内存总量;
在本申请实施例中,上述待检测进程具体指的是Java进程。在需要检测某个Java进程是否存在内存泄露现象时,首先需要运行该进程,以使得该进程复现其可能存在的内存泄露现象,并在合适的时机通过堆转储操作捕捉该内存泄露现象。基于此,可以由测试人员确定了待检测进程后,触发该待检测进程开始启动运行。在该待检测进程启动时,还可以获取并记录下当前待检测进程的所占用的内存总量,作为初始内存总量,以为后续初次进行内存总量的比对打下基础。
在步骤102中,在上述待检测进程启动后,实时扫描待检测进程当前的内存总量;
在本申请实施例中,一旦上述待检测进程启动后,即刻开始持续性实时扫描待检测进程当前的内存总量,以捕捉上述待检测进程的内存总量在各个时刻的变化。可选地,当上述智能设备搭载的是安卓系统时,可以在上述安卓系统的后台独立运行一个内存检测脚本,并且在上述待检测进行启动之前,就先启动该内存检测脚本的运行,以后续通过该内存检测脚本实时扫描待检测进程当前的内存总量。也即是说,使得上述内存检测脚本的运行时间能够覆盖上述待检测进程的运行时间,以保证待检测进程在整个运行期间都可以被检测到数据。具体地,上述扫描待检测进程当前的内存总量的操作,可以通过指令dumpsysmeminfo实现。
在步骤103中,在待检测进程启动时,以及,在上述待检测进程当前的内存总量与前次进行堆转储操作时的上述待检测进程的内存总量的差值超过预设的差值阈值时,触发上述待检测进程的堆转储操作,以得到堆转储文件;
在本申请实施例中,堆转储的触发时机有两个:其中一个是在待检测进程启动时,触发上述待检测进程的堆转储操作,以得到堆转储文件。这样的目的是记录下待检测进程在初始时刻的运存状况,为后续基于内存泄露的比对提供基础;另一个是在上述待检测进程当前的内存总量与前次进行堆转储操作时的上述待检测进程的内存总量的差值超过预设的差值阈值时,触发上述待检测进程的堆转储操作,以得到堆转储文件。上述预设的差值阈值可以被设定为10兆或其它数值,此处不作限定。考虑到待检测进程的内存泄漏的时机以及泄漏内存量是不确定,因而,通过设定上述两个堆转储的触发时间,在被检测进程的内存总量出现一定程度的内存变化时,自动触发内存堆转储操作,可以避免智能设备无策略的进行内存堆转储操作,避免得到大量的无效数据。
其中,上述触发上述待检测进程的堆转储操作的步骤,具体为:生成预设的堆转储指令;基于上述堆转储指令,将上述待检测进程的内存分布信息导出至预设的文件中。其中,上述预设的堆转储指令为am dumpheap,该堆转储指令可以将待检测进程的内存分布信息导出到hprof文件中。
在步骤104中,对所得到的堆转储文件进行分析;
在本申请实施例中,对通过步骤103所得到的堆转储文件进行分析。可选地,由于理想的内存检测策略是在待检测进程出现内存泄露前后至少导出两份堆转储文件,因而,可以在进行堆转储操作时,以时间顺序对堆转储操作所得到的堆转储文件进行标号;也即,基于各个堆转储文件的创建时间的先后顺序进行标号,例如,初次堆转储操作所得到的堆转储文件标号为1;第二次堆转储操作所得到的堆转储文件标号为2;第三次堆转储操作所得到的堆转储文件标号为3;……以此类推,实现对各个堆转储文件的标号。最后对任意两个相邻标号的堆转储文件进行分析及比对,例如,将标号为1的堆转储文件与标号为2的堆转储文件进行分析及比对。
在步骤105中,根据分析结果确定上述待检测进程的内存状况。
在本申请实施例中,对任意两个相邻标号的堆转储文件进行分析及比对,以确认在此过程中是否出现内存泄露操作,例如,将标号为1的堆转储文件与标号为2的堆转储文件进行分析及比对,基于其分析比对的结果可以确认待检测内存在对应时间段内(也即初次进行堆转储操作的时刻至第二次进行堆转储操作的时刻的时间段内)是否出现内存泄露状况。
可选地,在上述步骤104之前,上述内存检测方法还包括:
基于各个时刻上述待检测进程的内存总量,构建上述待检测进程的内存曲线图;
对上述内存曲线图进行分析,以筛选得到目标曲线段;
相应地,上述对所得到的堆转储文件进行分析,包括:
获取与上述目标曲线段相关联的堆转储文件,作为目标堆转储文件;
对上述目标堆转储文件进行分析。
在本申请实施例中,为了更好的说明上述步骤,请参阅图2,图2给出了一个待检测进程基于各个时刻的内存使用量(也即内存总量)所构建的内存曲线图的示例。考虑到内存泄露的情况往往表现为内存的增长,因而,上述对上述内存曲线图进行分析,以筛选得到目标曲线段的步骤具体包括:
在上述内存曲线图中,基于内存总量的增减趋势,确定一段以上内存上升曲线段;
对于任一内存上升曲线段,获取上述内存上升曲线段在上述内存曲线图中所处的时期;
若上述内存上升曲线段处于上述内存曲线图的预设时期内,则检测在上述内存上升曲线段后,是否存在与上述内存上升曲线段相对应的内存下降曲线段;
若上述内存上升曲线段不存在相对应的内存下降曲线段,则将上述内存上升曲线段确定为目标曲线段。
下面基于图2对上述各个步骤作出说明。通过对图2的分析可知,图2的内存曲线图共有五段内存上升曲线段,分别为曲线C1-C2、曲线C3-C4、曲线C5-C6、曲线C7-C8及曲线C9-C10;随后,需要对上述这些内存上升曲线进行筛选,以保留可能出现内存泄露情况的内存上升曲线段,筛选手段如下:
首先,判断该内存上升曲线段是否为上述内存曲线图的预设时期内,该预设时期指的是内存曲线图的初期阶段:考虑到一般的进程刚刚启动,都需要内存实现具体的工作,所以大部分进程在初始阶段都会出现占用大量内存的情况;也即,相比之后的内存增长,头一次增长曲线是可以理解的。因而可以将处于内存曲线图的初期阶段的内存上升曲线剔除。具体地,可以设定一预设的初期时间段,若内存上升曲线段的开始时间落入该初期时间段内,则认为该内存上升曲线段处于内存曲线图的初期阶段。通过上述方式,可以确定图2中的曲线C1-C2并非目标曲线段。
随后,判断该内存上升曲线段后是否存在与该内存上升曲线段相对应的内存下降曲线段:考虑到进程在正常运行的过程中,占用内存与释放内存往往是相对应出现的,所以此处将后续已经有内存释放操作的内存占用操作判定为待检测进程的正常操作;也即,若存在有相对应的内存释放阶段(内存下降曲线段)段,则前面出现的内存占用阶段(内存上升曲线段)是可以理解的。因而可以将不存在相对应的内存下降曲线段的内存上升曲线段剔除。通过上述方式,可以看到图2中的曲线C3-C4和曲线C7-C8均存在相对应的内存下降曲线,因而,可以确定图2中的曲线C3-C4和曲线C7-C8均非目标曲线段。
在通过上述筛选后,将保留下的内存上升曲线段作为目标曲线段。则针对图2,所得到的目标曲线段为曲线C5-C6以及曲线C9-C10。基于所获得目标曲线段,可以获取与该目标曲线段相关联的堆转储文件,作为目标堆转储文件,并对这些目标堆转储文件进行分析。具体地,可以是获取该目标曲线段的起止时间,然后将创建时间在该目标曲线段的起止时间之内的堆转储文件确定为与该目标曲线段相关联的目标堆转储文件。例如,图2中所构建的内存曲线图中的各个黑点即示出了堆转储文件的创建时间(也即,黑点表示在该时刻对待检测进程进行了一次堆转储操作);因而,可以将曲线C5-C6以及曲线C9-C10上的各个黑点所对应的堆转储文件作为目标堆转储文件进行分析。
可选地,若上述待检测进程存在内存泄露状况,则通过预设的分析工具,例如Memory Analyzer Tool等,对与上述待检测进程相关联的代码段进行分析及定位,以确认引起该内存泄漏状况的Java实例对象和代码位置。
由上可见,通过本申请方案,测试人员可在智能设备的正常测试或使用过程中,在用户无感知的情况下完成内存泄漏的检测工作;通过在后台运行内存检测脚本,排除了测试人员为复现内存泄漏所做的大量测试工作;且在检测的过程中,不再需要实时连接检测设备爱,极大降低了调试难度,减少了测试耗时。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
实施例二
本申请实施例二提供了一种内存检测装置,上述内存检测装置可集成于智能设备中,如图3所示,本申请实施例中的内存检测装置300包括:
记录单元301,用于在待检测进程启动时,记录上述待检测进程的初始内存总量;
堆转储单元302,用于在待检测进程启动时,触发上述待检测进程的堆转储操作,以得到堆转储文件;
扫描单元303,用于在上述待检测进程启动后,实时扫描待检测进程当前的内存总量;
上述堆转储单元302,还用于当上述待检测进程当前的内存总量与前次进行堆转储操作时的上述待检测进程的内存总量的差值超过预设的差值阈值时,触发上述待检测进程的堆转储操作,以得到堆转储文件;
分析单元304,用于对所得到的堆转储文件进行分析;
确定单元305,用于根据分析结果确定上述待检测进程的内存状况。
可选地,上述内存检测装置300应用于安卓系统;上述内存检测装置300还包括:
运行单元,用于在上述安卓系统的后台运行内存检测脚本;
相应地,上述扫描单元303,具体用于通过上述内存检测脚本实时扫描待检测进程当前的内存总量。
可选地,上述堆转储单元302包括:
堆转储指令生成子单元,用于生成预设的堆转储指令;
内存分布信息导出子单元,用于基于上述堆转储指令,将上述待检测进程的内存分布信息导出至预设的文件中。
可选地,上述内存检测装置300还包括:
内存曲线图构建单元,用于基于各个时刻上述待检测进程的内存总量,构建上述待检测进程的内存曲线图;
目标曲线段筛选单元,用于对上述内存曲线图进行分析,以筛选得到目标曲线段;
相应地,上述分析单元304包括:
目标堆转储文件确定子单元,用于获取与上述目标曲线段相关联的堆转储文件,作为目标堆转储文件;
目标堆转储文件分析子单元,用于对上述目标堆转储文件进行分析。
可选地,目标曲线段筛选单元包括:
内存上升曲线段确定子单元,用于在上述内存曲线图中,基于内存总量的增减趋势,确定一段以上内存上升曲线段;
时期获取子单元,用于对于任一内存上升曲线段,获取上述内存上升曲线段在上述内存曲线图中所处的时期;
内存下降曲线段检测子单元,用于若上述内存上升曲线段处于上述内存曲线图的预设时期内,则检测在上述内存上升曲线段后,是否存在与上述内存上升曲线段相对应的内存下降曲线段;
目标曲线段确定子单元,用于若上述内存上升曲线段不存在相对应的内存下降曲线段,则将上述内存上升曲线段确定为目标曲线段。
可选地,上述内存检测装置300还包括:
定位单元,用于若上述待检测进程存在内存泄露状况,则通过预设的分析工具对与上述待检测进程相关联的代码段进行分析及定位,以确认存在内存泄漏状况的Java实例对象和代码位置。
由上可见,通过本申请方案,测试人员可在智能设备的正常测试或使用过程中,在用户无感知的情况下完成内存泄漏的检测工作;通过在后台运行内存检测脚本,排除了测试人员为复现内存泄漏所做的大量测试工作;且在检测的过程中,不再需要实时连接检测设备爱,极大降低了调试难度,减少了测试耗时。
实施例三
本申请实施例三提供了一种智能设备,请参阅图4,本申请实施例中的智能设备4包括:存储器401,一个或多个处理器402(图4中仅示出一个)及存储在存储器401上并可在处理器上运行的计算机程序。其中:存储器401用于存储软件程序以及模块,处理器402通过运行存储在存储器401的软件程序以及单元,从而执行各种功能应用以及数据处理,以获取上述预设事件对应的资源。具体地,处理器402通过运行存储在存储器401的上述计算机程序时实现以下步骤:
在待检测进程启动时,记录上述待检测进程的初始内存总量,并触发上述待检测进程的堆转储操作,以得到堆转储文件;
在上述待检测进程启动后,实时扫描待检测进程当前的内存总量;
当上述待检测进程当前的内存总量与前次进行堆转储操作时的上述待检测进程的内存总量的差值超过预设的差值阈值时,触发上述待检测进程的堆转储操作,以得到堆转储文件;
对所得到的堆转储文件进行分析;
根据分析结果确定上述待检测进程的内存状况。
假设上述为第一种可能的实施方式,则在第一种可能的实施方式作为基础而提供的第二种可能的实施方式中,上述内存检测方法应用于安卓系统;在上述待检测进程启动前,处理器402通过运行存储在存储器401的上述计算机程序时还实现以下步骤:
在上述安卓系统的后台运行内存检测脚本;
相应地,上述实时扫描待检测进程当前的内存总量,包括:
通过上述内存检测脚本实时扫描待检测进程当前的内存总量。
在上述第一种可能的实施方式作为基础而提供的第三种可能的实施方式中,上述触发上述待检测进程的堆转储操作,包括:
生成预设的堆转储指令;
基于上述堆转储指令,将上述待检测进程的内存分布信息导出至预设的文件中。
在上述第一种可能的实施方式作为基础而提供的第四种可能的实施方式中,在上述对所得到的堆转储文件进行分析之前,处理器402通过运行存储在存储器401的上述计算机程序时还实现以下步骤:
基于各个时刻上述待检测进程的内存总量,构建上述待检测进程的内存曲线图;
对上述内存曲线图进行分析,以筛选得到目标曲线段;
相应地,上述对所得到的堆转储文件进行分析,包括:
获取与上述目标曲线段相关联的堆转储文件,作为目标堆转储文件;
对上述目标堆转储文件进行分析。
在上述第四种可能的实施方式作为基础而提供的第五种可能的实施方式中,上述对上述内存曲线图进行分析,以筛选得到目标曲线段,包括:
在上述内存曲线图中,基于内存总量的增减趋势,确定一段以上内存上升曲线段;
对于任一内存上升曲线段,获取上述内存上升曲线段在上述内存曲线图中所处的时期;
若上述内存上升曲线段处于上述内存曲线图的预设时期内,则检测在上述内存上升曲线段后,是否存在与上述内存上升曲线段相对应的内存下降曲线段;
若上述内存上升曲线段不存在相对应的内存下降曲线段,则将上述内存上升曲线段确定为目标曲线段。
在上述第一种可能的实施方式作为基础,或者上述第二种可能的实施方式作为基础,或者上述第三种可能的实施方式作为基础,或者上述第四种可能的实施方式作为基础,或者上述第五种可能的实施方式作为基础而提供的第六种可能的实施方式中,在上述根据分析结果确定上述待检测进程的内存状况之后,处理器402通过运行存储在存储器401的上述计算机程序时还实现以下步骤:
若上述待检测进程存在内存泄露状况,则通过预设的分析工具对与上述待检测进程相关联的代码段进行分析及定位,以确认存在内存泄漏状况的Java实例对象和代码位置。
应当理解,在本申请实施例中,所称处理器402可以是中央处理单元(CentralProcessing Unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器401可以包括只读存储器和随机存取存储器,并向处理器402提供指令和数据。存储器401的一部分或全部还可以包括非易失性随机存取存储器。例如,存储器401还可以存储设备类型的信息。
由上可见,通过本申请方案,测试人员可在智能设备的正常测试或使用过程中,在用户无感知的情况下完成内存泄漏的检测工作;通过在后台运行内存检测脚本,排除了测试人员为复现内存泄漏所做的大量测试工作;且在检测的过程中,不再需要实时连接检测设备爱,极大降低了调试难度,减少了测试耗时。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将上述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者外部设备软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,上述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,上述计算机程序包括计算机程序代码,上述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。上述计算机可读存储介质可以包括:能够携带上述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机可读存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,上述计算机可读存储介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读存储介质不包括是电载波信号和电信信号。
以上上述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

Claims (9)

1.一种内存检测方法,其特征在于,包括:
在待检测进程启动时,记录所述待检测进程的初始内存总量,并触发所述待检测进程的堆转储操作,以得到堆转储文件;
在所述待检测进程启动后,实时扫描待检测进程当前的内存总量;
当所述待检测进程当前的内存总量与前次进行堆转储操作时的所述待检测进程的内存总量的差值超过预设的差值阈值时,触发所述待检测进程的堆转储操作,以得到堆转储文件;
基于各个时刻所述待检测进程的内存总量,构建所述待检测进程的内存曲线图;
对所述内存曲线图进行分析,以筛选得到目标曲线段;
获取与所述目标曲线段相关联的堆转储文件,作为目标堆转储文件;
对所述目标堆转储文件进行分析;
根据分析结果确定所述待检测进程的内存状况。
2.如权利要求1所述的内存检测方法,其特征在于,所述内存检测方法应用于安卓系统;在所述待检测进程启动前,所述内存检测方法还包括:
在所述安卓系统的后台运行内存检测脚本;
相应地,所述实时扫描待检测进程当前的内存总量,包括:
通过所述内存检测脚本实时扫描待检测进程当前的内存总量。
3.如权利要求1所述的内存检测方法,其特征在于,所述触发所述待检测进程的堆转储操作,包括:
生成预设的堆转储指令;
基于所述堆转储指令,将所述待检测进程的内存分布信息导出至预设的文件中。
4.如权利要求1所述的内存检测方法,其特征在于,所述对所述内存曲线图进行分析,以筛选得到目标曲线段,包括:
在所述内存曲线图中,基于内存总量的增减趋势,确定一段以上内存上升曲线段;
对于任一内存上升曲线段,获取所述内存上升曲线段在所述内存曲线图中所处的时期;
若所述内存上升曲线段处于所述内存曲线图的预设时期内,则检测在所述内存上升曲线段后,是否存在与所述内存上升曲线段相对应的内存下降曲线段;
若所述内存上升曲线段不存在相对应的内存下降曲线段,则将所述内存上升曲线段确定为目标曲线段。
5.如权利要求1至4任一项所述的内存检测方法,其特征在于,在所述根据分析结果确定所述待检测进程的内存状况之后,所述内存检测方法还包括:
若所述待检测进程存在内存泄露状况,则通过预设的分析工具对与所述待检测进程相关联的代码段进行分析及定位,以确认存在内存泄漏状况的Java实例对象和代码位置。
6.一种内存检测装置,其特征在于,包括:
记录单元,用于在待检测进程启动时,记录所述待检测进程的初始内存总量;
堆转储单元,用于在待检测进程启动时,触发所述待检测进程的堆转储操作,以得到堆转储文件;
扫描单元,用于在所述待检测进程启动后,实时扫描待检测进程当前的内存总量;
所述堆转储单元,还用于当所述待检测进程当前的内存总量与前次进行堆转储操作时的所述待检测进程的内存总量的差值超过预设的差值阈值时,触发所述待检测进程的堆转储操作,以得到堆转储文件;
分析单元,用于对所得到的堆转储文件进行分析;
确定单元,用于根据分析结果确定所述待检测进程的内存状况;
其中,所述内存检测装置还包括:
内存曲线图构建单元,用于基于各个时刻所述待检测进程的内存总量,构建所述待检测进程的内存曲线图;
目标曲线段筛选单元,用于对所述内存曲线图进行分析,以筛选得到目标曲线段;
所述分析单元包括:
目标堆转储文件确定子单元,用于获取与所述目标曲线段相关联的堆转储文件,作为目标堆转储文件;
目标堆转储文件分析子单元,用于对所述目标堆转储文件进行分析。
7.如权利要求6所述的内存检测装置,其特征在于,所述内存检测装置应用于安卓系统;所述内存检测装置还包括:
运行单元,用于在所述安卓系统的后台运行内存检测脚本;
相应地,所述扫描单元,具体用于通过所述内存检测脚本实时扫描待检测进程当前的内存总量。
8.一种智能设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至5任一项所述方法的步骤。
9.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至5任一项所述方法的步骤。
CN201910769027.XA 2019-08-20 2019-08-20 一种内存检测方法、内存检测装置及智能设备 Active CN112416733B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910769027.XA CN112416733B (zh) 2019-08-20 2019-08-20 一种内存检测方法、内存检测装置及智能设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910769027.XA CN112416733B (zh) 2019-08-20 2019-08-20 一种内存检测方法、内存检测装置及智能设备

Publications (2)

Publication Number Publication Date
CN112416733A CN112416733A (zh) 2021-02-26
CN112416733B true CN112416733B (zh) 2023-12-29

Family

ID=74779055

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910769027.XA Active CN112416733B (zh) 2019-08-20 2019-08-20 一种内存检测方法、内存检测装置及智能设备

Country Status (1)

Country Link
CN (1) CN112416733B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108388496A (zh) * 2018-01-23 2018-08-10 晶晨半导体(上海)股份有限公司 一种系统日志的收集方法
CN113448735B (zh) * 2021-07-16 2025-02-07 维沃移动通信有限公司 内存泄露处理方法、装置和电子设备
CN116680161B (zh) * 2022-10-10 2024-06-07 荣耀终端有限公司 内存泄漏检测方法、可读介质和电子设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106598871A (zh) * 2016-12-29 2017-04-26 山东鲁能智能技术有限公司 Linux下的崩溃文件自动化分析方法及系统
CN109656722A (zh) * 2019-01-04 2019-04-19 Oppo广东移动通信有限公司 内存优化方法、装置、移动终端及存储介质

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106598871A (zh) * 2016-12-29 2017-04-26 山东鲁能智能技术有限公司 Linux下的崩溃文件自动化分析方法及系统
CN109656722A (zh) * 2019-01-04 2019-04-19 Oppo广东移动通信有限公司 内存优化方法、装置、移动终端及存储介质

Also Published As

Publication number Publication date
CN112416733A (zh) 2021-02-26

Similar Documents

Publication Publication Date Title
CN112416733B (zh) 一种内存检测方法、内存检测装置及智能设备
CN110633222B (zh) 一种回归测试用例的确定方法及装置
CN110196801B (zh) 一种基于代码覆盖率的测试方法及装置
CN110543420B (zh) 一种软件测试方法、系统、终端及存储介质
CN110288599A (zh) 一种坏点检测方法、装置、电子设备及存储介质
CN110704303B (zh) 一种测试覆盖度信息的获取方法及装置
CN101697144A (zh) 一种软件测试方法及测试装置
CN109558328A (zh) 一种代码覆盖率的测试方法、系统、装置及可读存储介质
Schuler et al. Examining the energy impact of sorting algorithms on android: an empirical study
CN110889116B (zh) 一种广告拦截方法、装置及电子设备
CN114676066A (zh) 目标应用的安全测试方法及其装置、电子设备及存储介质
CN118151077A (zh) 磁共振成像设备测试方法、装置、存储介质及电子设备
CN111723001A (zh) Php代码覆盖率报告的生成方法及装置
CN107402883B (zh) 一种数据测试处理方法和装置
CN110554949A (zh) 一种跨平台的进程数据收集分析工具、方法及使用方法
CN116955193A (zh) 接口测试方法、装置、设备及存储介质
CN116881117A (zh) 测试用例覆盖率评估方法、装置、计算机设备和存储介质
CN112346963B (zh) 一种基于aop的插桩测试方法、装置和电子设备
CN114168470A (zh) 软件系统的测试方法及装置、电子设备、存储介质
CN114780412A (zh) 页面测试方法、系统、设备及介质
CN113806231A (zh) 一种代码覆盖率分析方法、装置、设备和介质
TW202141273A (zh) 電腦軟體模組配置、電路配置、及用於改良軟體執行監控之配置及方法
CN117992358B (zh) 基于区块链的智能合约跨合约测试方法及装置
CN112612882A (zh) 检阅报告生成方法、装置、设备和存储介质
CN117648696B (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
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20240422

Address after: Room 101 and 201, Building 1, Qingwang Science and Technology Park, Intersection of Ecological Fourth Road and Keji Fourth Road, Lianxi District, Jiujiang City, Jiangxi Province, 332000

Patentee after: Jiujiang Youbixing Technology Co.,Ltd.

Country or region after: China

Address before: 518000 16th and 22nd Floors, C1 Building, Nanshan Zhiyuan, 1001 Xueyuan Avenue, Nanshan District, Shenzhen City, Guangdong Province

Patentee before: Shenzhen UBTECH Technology Co.,Ltd.

Country or region before: China