CN104182320B - 一种监控内存泄漏的方法及装置 - Google Patents
一种监控内存泄漏的方法及装置 Download PDFInfo
- Publication number
- CN104182320B CN104182320B CN201310195512.3A CN201310195512A CN104182320B CN 104182320 B CN104182320 B CN 104182320B CN 201310195512 A CN201310195512 A CN 201310195512A CN 104182320 B CN104182320 B CN 104182320B
- Authority
- CN
- China
- Prior art keywords
- information
- memory
- user interface
- operating user
- internal memory
- 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
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种监控内存泄漏的方法及装置,该方法包括:监测用户针对一应用程序的用户界面操作信息,并存储监测到的用户界面操作信息;监控系统内存使用情况,得到系统的内存信息;从所述内存信息中获取标示所述一应用程序内存使用情况的关键字段值,若所述第一比较结果为所述关键字段值大于所述第一预设阈值,则确定发生了内存泄露,则利用所述用户界面操作信息和所述内存信息生成一报警信息;接收到一触发信息后,输出所述报警信息。本发明所提供的方法和装置,可以确定出现内存泄漏问题时的特定操作场景,分析对应LOG信息,便于开发人员快速定位程序中内存使用的问题。
Description
技术领域
本发明涉及电子技术领域,尤其涉及一种监控内存泄漏的方法及装置。
背景技术
现有技术中,使用JAVA语言在Android系统上开发应用程序时,如果使用不当,很容易发生内存泄漏,在计算机科学中,内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏与许多其他问题有着相似的症状,并且通常情况下只能由那些可以获得程序源代码的程序员才可以分析出来。然而,有不少人习惯于把任何不需要的内存使用的增加描述为内存泄漏,严格意义上来说这是不准确的。
一般常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显式释放的内存。应用程序一般使用malloc,calloc,realloc等函数(C++中使用new操作符)从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,这就说这块内存泄漏了。
Android系统的JVM提供了垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或JVM的问题。其实,这种想法是不正确的,因为Java也存在内存泄漏,但它的表现与C++不同。如果正在开发的Java代码要全天24小时在服务器上运行,则内存漏洞在此处的影响就比在配置实用程序中的影响要大得多,即使最小的漏洞也会导致JVM耗尽全部可用内存。另外,在很多嵌入式系统中,内存的总量非常有限。在相反的情况下,即便程序的生存期较短,如果存在分配大量临时对象(或者若干吞噬大量内存的对象)的任何Java代码,而且当不再需要这些对象时也没有取消对它们的引用,则仍然可能达到内存极限。
虽然JVM提供了GC机制可一定程度防止内存泄露,但还是不能完全避免,一旦发生泄漏,会导致应用终止,甚至系统崩溃。
针对现有技术中GC机制下还是存在内存泄露的问题,现有提供的解决方案为:使用android提供的DDMS(Dalvik Debug Monitor Service,是Android开发环境中的Dalvik虚拟机调试监控服务)或者MAT内存分析工具。但是该方案仍然存在一些缺点如:必须连线调试,使用PC机连接手机监控内存变化,而内存泄漏可能发生在某些特定场景的操作下,比如自由测试的情况,因此连线时无法抓住这些特定操作的情况,错过发现内存泄漏问题的场景。
另外,DDMS涉及较专业的操作流程,所以需要具有很强的专业技术知识才能灵活应用,所以导致操作不便。
发明内容
本发明提供一种监控内存泄漏的方法及装置,本发明所提供的方法和装置解决现有技术中内存泄露检测无法确定出现内存泄露问题时的特定操作情况,错过发现内存泄漏问题的场景的问题。
针对上述问题本发明提供一种监控内存泄漏的方法,该方法应用于一电子设备中,该方法包括:
监测用户针对一应用程序的用户界面操作信息,并存储监测到的用户界面操作信息;
监控系统内存使用情况,得到系统的内存信息;
从所述内存信息中获取标示所述一应用程序内存使用情况的关键字段值,并将所述关键字段值与第一预设阈值进行比较,得到第一比较结果;
若所述第一比较结果为所述关键字段值大于所述第一预设阈值,则确定发生了内存泄露,则利用所述用户界面操作信息和所述内存信息生成一报警信息;
接收到一触发信息后,输出所述报警信息。
更优化的方案,存储监测到的用户界面操作信息包括:
检测已存储的用户界面操作次数是否超过第二阈值,如果是,则利用新监测到用户界面操作信息覆盖已存储的用户界面操作信息。
更优化的方案,利用新监测到用户界面操作信息覆盖已存储的用户界面操作信息包括:
确定已存储的每个用户界面操作信息所对应的存储时间;
利用新监测到的用户界面操作信息更新距离当前时间最远的用户界面操作所对应的用户界面操作信息。
更优化的方案,所述用户界面操作信息包括操作控件动作信息、用户在对话框中输入的字符串信息。
更优化的方案,当所述电子设备中的系统为android系统或Linux系统时,所述监控系统内存使用情况,得到系统的内存信息包括:
将检测到的应用程序的进程独自占用的物理内存、监控系统已使用内存情况或空闲内存情况信息、检测本机堆内存和dalvik所使用的内存信息对应记录到预设的字段值中。
针对上述方法本发明还提供一种监控内存泄漏的装置,该装置应用于一电子设备中,该装置包括:
操作信息获取模块,用于监测用户针对一应用程序的用户界面操作信息,并存储监测到的用户界面操作信息;
内存信息检测模块,用于监控系统内存使用情况,得到系统的内存信息;
第一比较模块,用于从所述内存信息中获取标示所述一应用程序内存使用情况的关键字段值,并将所述关键字段值与第一预设阈值进行比较,得到第一比较结果;
报警信息生成模块,若所述第一比较结果为所述关键字段值大于所述第一预设阈值,用于确定发生了内存泄露,则利用所述用户界面操作信息和所述内存信息生成一报警信息;
信息输出模块,用于接收到一触发信息后,输出所述报警信息。
更优化的方案,所述操作信息获取模块还用于检测已存储的用户界面操作次数是否超过第二阈值,如果是,则利用新监测到用户界面操作信息覆盖已存储的用户界面操作信息。
更优化的方案,所述操作信息获取模块还用于确定已存储的每个用户界面操作信息所对应的存储时间;利用新监测到的用户界面操作信息更新距离当前时间最远的用户界面操作所对应的用户界面操作信息。
更优化的方案,该装置包括转换模块,在存储监测到的用户界面操作信息之前,用于将检测到的用户界面操作信息转换为预设的脚本语言。
更优化的方案,当所述电子设备中的系统为android系统或Linux系统时,内存信息检测模块还用于将检测到的应用程序的进程独自占用的物理内存、监控系统已使用内存情况或空闲内存情况信息、检测本机堆内存和dalvik所使用的内存信息对应记录到预设的字段值中。
上述技术方案中的一个或两个,至少具有如下技术效果:
本发明实施例所提供的方法和装置,首先监控了用户对一应用程序的用户界面执行操作时的操作信息,并同时监控系统内存的使用情况;当监控到系统内存使用出现异常,则可以将内存异常情况和用户的操作信息结合生成对应的报警。通过上述方法如果后续检测人员检测系统问题时候,则可以直接调取已经存储的报警信息以供检测人员分析。从而实现了内存泄露检测的离线使用,可以在应用程序开发调试阶段,由测试人员进行自由测试,压力测试等;
因为发现系统内存问题的同时保存了对应的用户操作信息,所以检测人员在检测电子设备故障时能够确定设备出现问题的特定场景。当检测到出现内存泄漏问题时,可以对照特定操作场景,分析对应LOG信息,便于开发人员快速定位程序中内存使用的问题。而且本发明提供的方法步骤简便,无需测试人员掌握DDMS等专业工具的使用方法。
附图说明
图1为本发明实施例一种监控内存泄漏的方法的流程图;
图2为本发明实施例一种监控内存泄漏的装置的结构示意图。
具体实施方式
针对现有技术中GC机制下还是存在内存泄露的问题,现有提供的解决方案为:使用android提供的DDMS(Dalvik Debug Monitor Service,是Android开发环境中的Dalvik虚拟机调试监控服务)或者MAT内存分析工具。但是该方案仍然存在一些缺点如:必须连线调试,使用PC机连接手机监控内存变化,而内存泄漏可能发生在某些特定场景的操作下,比如自由测试的情况,因此连线时无法抓住这些特定操作的情况,错过发现内存泄漏问题的场景。另外,DDMS涉及较专业的操作流程,所以需要具有很强的专业技术知识才能灵活应用,所以导致操作不便。
检测内存泄漏的关键是要能截获住对分配内存和释放内存的函数的调用。截获住这两个函数,就能跟踪每一块内存的生命周期,比如,每当成功的分配一块内存后,就把它的指针加入一个全局的list中;每当释放一块内存,再把它的指针从list中删除。这样,当程序结束的时候,list中剩余的指针就是指向那些没有被释放的内存。
如果要检测堆内存的泄漏,那么需要截获住malloc/realloc/free和new/delete就可以了(其实new/delete最终也是用malloc/free的,所以只要截获前面一组即可)。对于其他的泄漏,可以采用类似的方法,截获住相应的分配和释放函数。比如,要检测BSTR的泄漏,就需要截获SysAllocString/SysFreeString;要检测HMENU的泄漏,就需要截获CreateMenu/DestroyMenu。(有的资源的分配函数有多个,释放函数只有一个,比如,SysAllocStringLen也可以用来分配BSTR,这时就需要截获多个分配函数)
在Windows平台下,检测内存泄漏的工具常用的一般有三种,MS C-RuntimeLibrary内建的检测功能;外挂式的检测工具,诸如,Purify,BoundsChecker等;利用Windows NT自带的Performance Monitor。这三种工具各有优缺点,MS C-Runtime Library虽然功能上较之外挂式的工具要弱,但是它是免费的;Performance Monitor虽然无法标示出发生问题的代码,但是它能检测出隐式的内存泄漏的存在,这是其他两类工具无能为力的地方。
针对上述现有技术中的问题和内存泄露的成因及特征,本发明提供一种监控内存泄漏的方法,该方法应用于一电子设备中,该方法包括:监测用户针对一应用程序的用户界面操作信息,并存储监测到的用户界面操作信息;监控系统内存使用情况,得到系统的内存信息;从所述内存信息中获取标示所述一应用程序内存使用情况的关键字段值,并将所述关键字段值与第一预设阈值进行比较,得到第一比较结果;若所述第一比较结果为所述关键字段值大于所述第一预设阈值,则确定发生了内存泄露,则利用所述用户界面操作信息和所述内存信息生成一报警信息;接收到一触发信息后,输出所述报警信息。
在本发明实施例所提供的方法中首先监控了用户对一应用程序的用户界面执行操作时的操作信息,并同时监控系统内存的使用情况;当监控到系统内存使用出现异常,则可以将内存异常情况和用户的操作信息结合生成对应的报警。通过上述方法如果后续检测人员检测系统问题时候,则可以直接调取已经存储的报警信息以供检测人员分析。从而实现了内存泄露检测的离线使用,可以在应用程序开发调试阶段,由测试人员进行自由测试,压力测试等;
因为发现系统内存问题的同时保存了对应的用户操作信息,所以检测人员在检测电子设备故障时能够确定设备出现问题的特定场景。当检测到出现内存泄漏问题时,可以对照特定操作场景,分析对应LOG信息,便于开发人员快速定位程序中内存使用的问题。而且本发明提供的方法步骤简便,无需测试人员掌握DDMS等专业工具的使用方法。
如图1所示,本发明实施例提供一种监控内存泄漏的方法,下面结合说明书附图对本发明的具体实施方式进行详细说明:
本发明实施例的方法应用于一电子设备中,该电子设备第一电子设备可以是电脑、手机、也可以是平板等电子设备,该方法具体包括:
步骤101,监测用户针对一应用程序的用户界面操作信息(User's Interface,UI操作),并存储监测到的用户界面操作信息;
其中,为减少存储所述用户操作界面信息时所使用的存储空间,存储监测到的用户界面操作信息包括:
检测已存储的用户界面操作次数是否超过第二阈值,如果是,则利用新监测到用户界面操作信息覆盖已存储的用户界面操作信息。在该实施例中,所述第二阈值可以是20-30次用户操作。
另外,为了使得最后存储的用户界面操作信息是与内存泄露问题出现的时间最接近的,所以利用新监测到用户界面操作信息覆盖已存储的用户界面操作信息的方式可以是:
确定已存储的每个用户界面操作信息所对应的存储时间;
利用新监测到的用户界面操作信息更新距离当前时间最远的用户界面操作所对应的用户界面操作信息。
上述更新操作可以叫做操作回滚,具体实现可以是指针回到文件头,使得新的用户界面操作信息输入覆盖旧的用户界面操作信息。
其中所述用户界面操作信息包括操作控件动作信息、用户在对话框中输入的字符串信息。
记录所述用户界面操作信息是自动化测试中的一种技术,指在UI程序开始后,监控UI界面上的控件情况,从系统消息或应用内存中获取用户输入的任何操作,包括记录操作控件动作(比如click,log press,scroll等)和在对话框中输入的字符串信息。
另外,为了便于信息的输出,所以存储监测到的用户界面操作信息之前,进一步将检测到的用户界面操作信息转换为预设的脚本语言。
另外,转化为预设脚本语言的信息用户可浏览或后期编辑的技术操作。
步骤102,监控系统内存使用情况,得到系统的内存信息;
在不同的系统中,根据使用的命令不同,命令呈现的内存信息也会不一样。所以本发明实施例中监控系统内存使用情况时,所使用的命令也不相同。在具体操作时,需要根据每个系统中内存信息代表的内存状态的重要性来就进行过滤,并对这些重要指标信息进行监控。
若所述电子设备中的系统为android系统或Linux系统时,所述监控系统内存使用情况,得到系统的内存信息包括:
将检测到的应用程序的进程独自占用的物理内存、监控系统已使用内存情况或空闲内存情况信息、检测本机堆内存和dalvik所使用的内存信息对应记录到预设的字段值中。
步骤103,从所述内存信息中获取标示所述一应用程序内存使用情况的关键字段值,并将所述关键字段值与第一预设阈值进行比较,得到第一比较结果;
步骤104,若所述第一比较结果为所述关键字段值大于所述第一预设阈值,则确定发生了内存泄露,则利用所述用户界面操作信息和所述内存信息生成一报警信息;
步骤105,接收到一触发信息后,输出所述报警信息。
对于如何在接收到一触发信息后,输出所述报警信息,具体实现过程举例说明为:当检测人员确定所述电子设备出现内存泄露问题时,可以采用另一电子设备中的特定应用程序的特定功能来读取出存储的报警信息,根据报警信息在中包括的用户界面操作信息确定出现内存泄漏问题时,所对应的特定场景,从而根据对照特定操作场景,分析对应LOG信息,便于开发人员快速定位程序中内存使用的问题。而且本发明提供的方法步骤简便,无需测试人员掌握DDMS等专业工具的使用方法。
本发明实施例所提供的方法中,针对不同的系统所述监控系统内存使用情况,得到系统的内存信息具体实现方式可以是;
(1)针对Android系统和Linux系统,进行系统内存信息监控时候通过预设的命令获取,具体实现监控的命令包括:
A、Procrank命令各个进程的VSS、RSS、PSS和USS信息,VSS-Virtual Set Size虚拟耗用内存(包含共享库占用的内存)、RSS-Resident Set Size实际使用物理内存(包含共享库占用的内存)、PSS-Proportional Set Size实际使用的物理内存(比例分配共享库占用的内存)和USS-Unique Set Size进程独自占用的物理内存(不包含共享库占用的内存。一般情况下内存占用大小有如下规律:VSS>=RSS>=PSS>=USS。
若单纯监控某进程的内存使用情况,上面的4类内存耗用信息,USS是最能说明内存是否出现内存泄露情况的参数,因为其只代表了属于此进程所使用的内存情况,当此进程被关掉后,其内存会完全被释放掉。所以procrank命令,则监控USS参数。
B、Android系统和Linux系统都提供了free命令,此命令能获取total,used,free,shared和buffers的大小,该命令主要是监控整个系统的内存情况,得到整个系统的内存使用情况,但本发明实施中只是需要关注free和used信息中其中一项即可,它们分别代表了系统目前的剩余的内存和已经使用的内存大小,两种之和就是total的值。
C、在Android系统中,除了procrank和free命令外,还提供了dumpsys meminfo,此命令可以针对某个程序执行,并显示此程序的内存使用信息,且呈现的内存信息较之前的命令会更多。在dumpsys meminfo命令中,本发明实施例需要关注的信息是Davlik和Native相关的Heap信息;
Heap Size:堆的总大小;
Heap Alloc:已经分配的堆大小;
Heap Free:剩余的堆大小;
Native heap:使用C\C++在堆上分配的内存;
Dalvik heap:dalvik所使用的内存,主要是使用java在上层应用java堆中分配的内存大小;
对于单个程序内存的限制是对Native heap与Dalvik heap之和的限制,因此这两类内存信息之间是相互平衡制约的,当某类的内存使用增大时,另一类的内存可使用量也就缩小。对于某个上层应用,若存在内存泄露,那么在每次运行结束后,其对应的NativeHeap Alloc或者Dalvik Heap Alloc的值就会不断增加,最终因为超过规定单个程序的内存使用上限,而导致产生OOM(Out Of Memory),甚至造成系统崩溃。
(2)Windows系统下,实现内存监控的方式包括两种,具体可以是:
a,可以通过系统自带的“性能”工具perfmon.msc来对整个系统的memory进行监测,该性能工具还提供报表形式数据。
b,另外,Windows系统也可以通过任务管理器实时监测进程的内存使用情况。
若在Windows下监测某个应用程序的内存情况,可以在其源码中添加CRT(C Run-Time library,C运行时库)的调试堆函数,并在Debug模式下运行程序,以进行内存泄露的监测。具体函数如下:
1.启用调试堆函数
#define_CRTDBG_MAP_ALLOC
#include<stdlib.h>
#include<crtdbg.h>
2.观察内存状态函数:
malloc_dbg();
free_dbg();/跟踪内存的分配和释放:/
struct_CrtMemState;/内存状态快照结构体,用于存储内存状态的快照/
void_CrtMemCheckpoint(_CrtMemState*state);/在指定地点记录内存状态快照/
int_CrtMemDifference(
_CrtMemState*stateDiff,
const_CrtMemState*oldState,
const_CrtMemState*newState
);/对两个不同的内存状态快照进行对比,通常可以在要监测的函数前后获取两个内存快照,然后进行对比,获取内存差异/
void_CrtMemDumpStatistics(
const_CrtMemState*state
);/将内存状态dump出来。其中state是通过CrtMemCheckpoint或者CrtMemDifference获取的值/
3.监测内存泄露函数:
int_CrtDumpMemoryLeaks(void);/当程序的debug模式下运行时,_CrtDumpMemoryLeaks会在当内存发生泄露时,在“输出”窗口中显示内存泄漏信息/
int_CrtSetReportMode(
int reportType,
int reportMode
);/设置报告的输出位置/
_CrtSetReportMode(_CRT_ERROR,_CRTDBG_MODE_DEBUG);/将报告的输出位置重置为输出窗口/
int_CrtSetDbgFlag(
int newFlag
);/检索或修改_crtDbgFlag该值指示控件调试堆管理器的分配行为/
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF),/在程序退出时自动调用/CrtDumpMemoryLeaks,/保证程序的任意位置的退出,都能成功调用到/_CrtDumpMemoryLeaks/进行内存泄露判断监测/。
在本发明实施例所提供的方法中首先监控了用户对一应用程序的用户界面执行操作时的操作信息,并同时监控系统内存的使用情况;当监控到系统内存使用出现异常,则可以将内存异常情况和用户的操作信息结合生成对应的报警。通过上述方法如果后续检测人员检测系统问题时候,则可以直接调取已经存储的报警信息以供检测人员分析。从而实现了内存泄露检测的离线使用,可以在应用程序开发调试阶段,由测试人员进行自由测试,压力测试等;
因为发现系统内存问题的同时保存了对应的用户操作信息,所以检测人员在检测电子设备故障时能够确定设备出现问题的特定场景,出现内存泄漏问题时,可以对照特定操作场景,分析对应LOG信息,便于开发人员快速定位程序中内存使用的问题。而且本发明提供的方法步骤简便,无需测试人员掌握DDMS等专业工具的使用方法。
如图2所示,根据上述方法本发明提供一种监控内存泄漏的装置,该装置应用于一电子设备中,该装置包括:
操作信息获取模块201,用于监测用户针对一应用程序的用户界面操作信息,并存储监测到的用户界面操作信息;
内存信息检测模块202,用于监控系统内存使用情况,得到系统的内存信息;
第一比较模块203,用于从所述内存信息中获取标示所述一应用程序内存使用情况的关键字段值,并将所述关键字段值与第一预设阈值进行比较,得到第一比较结果;
报警信息生成模块204,若所述第一比较结果为所述关键字段值大于所述第一预设阈值,用于确定发生了内存泄露,则利用所述用户界面操作信息和所述内存信息生成一报警信息;
信息输出模块205,用于接收到一触发信息后,输出所述报警信息。
其中,为减少存储所述用户操作界面信息时所使用的存储空间,存储监测到的用户界面操作信息包括:
所述操作信息获取模块201还用于检测已存储的用户界面操作次数是否超过第二阈值,如果是,则利用新监测到用户界面操作信息覆盖已存储的用户界面操作信息。
另外,为了使得最后存储的用户界面操作信息是与内存泄露问题出现的时间最接近的,所述操作信息获取模块201利用新监测到用户界面操作信息覆盖已存储的用户界面操作信息可以是:
所述操作信息获取模块201还用于确定已存储的每个用户界面操作信息所对应的存储时间;利用新监测到的用户界面操作信息更新距离当前时间最远的用户界面操作所对应的用户界面操作信息。
另外,为了便于信息的输出,该装置包括转换模块,在存储监测到的用户界面操作信息之前,用于将检测到的用户界面操作信息转换为预设的脚本语言。
在不同的系统中,根据使用的命令不同,命令呈现的内存信息也会不一样。所以本发明实施例中监控系统内存使用情况时,所使用的命令也不相同。在具体操作时,需要根据每个系统中内存信息代表的内存状态的重要性来就进行过滤,并对这些重要指标信息进行监控。所以当所述电子设备中的系统为android系统或Linux系统时;
所述内存信息检测模块202还用于将检测到的应用程序的进程独自占用的物理内存、监控系统已使用内存情况或空闲内存情况信息、检测本机堆内存和dalvik所使用的内存信息对应记录到预设的字段值中。
本申请实施例中的上述一个或多个技术方案,至少具有如下的技术效果:
在本发明实施例所提供的方法中首先监控了用户对一应用程序的用户界面执行操作时的操作信息,并同时监控系统内存的使用情况;当监控到系统内存使用出现异常,则可以将内存异常情况和用户的操作信息结合生成对应的报警。通过上述方法如果后续检测人员检测系统问题时候,则可以直接调取已经存储的报警信息以供检测人员分析。从而实现了内存泄露检测的离线使用,可以在应用程序开发调试阶段,由测试人员进行自由测试,压力测试等;
因为发现系统内存问题的同时保存了对应的用户操作信息,所以检测人员在检测电子设备故障时能够确定设备出现问题的特定场景,出现内存泄漏问题时,可以对照特定操作场景,分析对应LOG信息,便于开发人员快速定位程序中内存使用的问题。而且本发明提供的方法步骤简便,无需测试人员掌握DDMS等专业工具的使用方法。
本发明所提供的方法在系统后台使用,抓取出现内存泄露问题的近期内用户的UI操作,监控系统内存情况,在某些场景导致内存泄漏时,保存操作场景和系统信息,为应用程序开发调试阶段,提供一种高效准确的辅助调试方法。
本发明所述的方法并不限于具体实施方式中所述的实施例,本领域技术人员根据本发明的技术方案得出其它的实施方式,同样属于本发明的技术创新范围。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种监控内存泄漏的方法,该方法应用于一电子设备中,其特征在于,该方法包括:
监测用户针对一应用程序的用户界面操作信息,并存储监测到的用户界面操作信息;
监控系统内存使用情况,得到系统的内存信息;
从所述内存信息中获取标示所述一应用程序内存使用情况的关键字段值,并将所述关键字段值与第一预设阈值进行比较,得到第一比较结果;
若所述第一比较结果为所述关键字段值大于所述第一预设阈值,则确定发生了内存泄露,则利用所述用户界面操作信息和所述内存信息生成一报警信息;
接收到一触发信息后,输出所述报警信息。
2.如权利要求1所述的方法,其特征在于,存储监测到的用户界面操作信息包括:
检测已存储的用户界面操作次数是否超过第二阈值,如果是,则利用新监测到用户界面操作信息覆盖已存储的用户界面操作信息。
3.如权利要求2所述的方法,其特征在于,利用新监测到用户界面操作信息覆盖已存储的用户界面操作信息包括:
确定已存储的每个用户界面操作信息所对应的存储时间;
利用新监测到的用户界面操作信息更新距离当前时间最远的用户界面操作所对应的用户界面操作信息。
4.如权利要求1所述的方法,其特征在于,所述用户界面操作信息包括操作控件动作信息、用户在对话框中输入的字符串信息。
5.如权利要求1所述的方法,其特征在于,当所述电子设备中的系统为android系统或Linux系统时,所述监控系统内存使用情况,得到系统的内存信息包括:
将检测到的应用程序的进程独自占用的物理内存信息、监控系统已使用内存情况或空闲内存情况信息、本机堆内存和dalvik所使用的内存信息这三组信息中的任一组或多组对应记录到预设的字段值中。
6.一种监控内存泄漏的装置,该装置应用于一电子设备中,其特征在于,该装置包括:
操作信息获取模块,用于监测用户针对一应用程序的用户界面操作信息,并存储监测到的用户界面操作信息;
内存信息检测模块,用于监控系统内存使用情况,得到系统的内存信息;
第一比较模块,用于从所述内存信息中获取标示所述一应用程序内存使用情况的关键字段值,并将所述关键字段值与第一预设阈值进行比较,得到第一比较结果;
报警信息生成模块,若所述第一比较结果为所述关键字段值大于所述第一预设阈值,用于确定发生了内存泄露,则利用所述用户界面操作信息和所述内存信息生成一报警信息;
信息输出模块,用于接收到一触发信息后,输出所述报警信息。
7.如权利要求6所述的装置,其特征在于,所述操作信息获取模块还用于检测已存储的用户界面操作次数是否超过第二阈值,如果是,则利用新监测到用户界面操作信息覆盖已存储的用户界面操作信息。
8.如权利要求7所述的装置,其特征在于,所述操作信息获取模块还用于确定已存储的每个用户界面操作信息所对应的存储时间;利用新监测到的用户界面操作信息更新距离当前时间最远的用户界面操作所对应的用户界面操作信息。
9.如权利要求6所述的装置,其特征在于,该装置包括转换模块,在存储监测到的用户界面操作信息之前,用于将检测到的用户界面操作信息转换为预设的脚本语言。
10.如权利要求6所述的装置,其特征在于,当所述电子设备中的系统为android系统或Linux系统时,内存信息检测模块还用于将检测到的应用程序的进程独自占用的物理内存信息、监控系统已使用内存情况或空闲内存情况信息、本机堆内存和dalvik所使用的内存信息这三组信息中的任一组或多组对应记录到预设的字段值中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310195512.3A CN104182320B (zh) | 2013-05-23 | 2013-05-23 | 一种监控内存泄漏的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310195512.3A CN104182320B (zh) | 2013-05-23 | 2013-05-23 | 一种监控内存泄漏的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104182320A CN104182320A (zh) | 2014-12-03 |
CN104182320B true CN104182320B (zh) | 2017-09-29 |
Family
ID=51963387
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310195512.3A Active CN104182320B (zh) | 2013-05-23 | 2013-05-23 | 一种监控内存泄漏的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104182320B (zh) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104484606A (zh) * | 2014-12-05 | 2015-04-01 | 国云科技股份有限公司 | 一种虚拟化平台内存信息保密性的验证方法 |
CN105487971A (zh) * | 2014-12-22 | 2016-04-13 | 哈尔滨安天科技股份有限公司 | 一种软件测试中操作步骤记录和复现的方法及系统 |
CN104534285B (zh) * | 2014-12-26 | 2017-02-22 | 福建智恒电子新技术有限公司 | 一种能耗异常监控方法及装置 |
CN105808219B (zh) * | 2014-12-29 | 2019-06-25 | 中国移动通信集团公司 | 一种内存空间分配方法及装置 |
CN104866409A (zh) * | 2015-05-29 | 2015-08-26 | 小米科技有限责任公司 | 内存泄露监控方法和装置 |
CN104991847B (zh) * | 2015-07-03 | 2018-11-23 | 厦门美图移动科技有限公司 | 一种内存泄露自动化检测方法、装置及移动终端 |
CN105049933B (zh) * | 2015-07-14 | 2018-12-07 | 四川长虹电器股份有限公司 | 智能电视内存的自动化记录监控方法 |
CN105243003A (zh) * | 2015-09-09 | 2016-01-13 | 浪潮(北京)电子信息产业有限公司 | 内存分配的监测方法及装置 |
CN105373479B (zh) * | 2015-12-14 | 2019-03-15 | 厦门美图移动科技有限公司 | 一种内存泄露的自动化测试方法、装置及移动终端 |
CN105573811B (zh) * | 2015-12-15 | 2018-12-07 | 广州品唯软件有限公司 | 系统内存控制方法及其系统 |
CN105740122B (zh) * | 2016-01-26 | 2019-07-26 | Oppo广东移动通信有限公司 | 一种手机内存泄漏的监测方法及监测系统 |
CN106257426A (zh) * | 2016-01-27 | 2016-12-28 | 上海华测导航技术股份有限公司 | 基于gnss接收机的内存泄露检测方法 |
CN106354627A (zh) * | 2016-07-21 | 2017-01-25 | 努比亚技术有限公司 | 一种应用程序内存泄漏的检测方法及系统 |
CN106383743B (zh) * | 2016-09-27 | 2020-04-17 | 腾讯科技(深圳)有限公司 | 业务处理方法及系统 |
CN108073441B (zh) * | 2016-11-14 | 2022-05-10 | 阿里巴巴集团控股有限公司 | 一种虚拟机内存监管方法与设备 |
CN106528430B (zh) * | 2016-12-01 | 2019-03-26 | 北京金山安全软件有限公司 | 一种应用程序的检测方法、装置及电子设备 |
CN106886476B (zh) * | 2017-02-08 | 2022-08-12 | 腾讯科技(深圳)有限公司 | 一种客户端的内存分析方法、装置及系统 |
CN114048051A (zh) | 2017-07-25 | 2022-02-15 | 华为技术有限公司 | 检测方法、设备及计算机可读存储介质 |
CN108255687A (zh) * | 2017-12-29 | 2018-07-06 | 五八同城信息技术有限公司 | 终端的应用程序内存监控测试方法、装置及电子设备 |
CN108334435B (zh) * | 2018-01-18 | 2021-12-24 | 杭州迪普科技股份有限公司 | 一种共享内存泄漏的提醒方法及装置 |
CN108984295B (zh) * | 2018-06-19 | 2020-08-07 | 珠海全志科技股份有限公司 | 内存回收方法、计算机装置及计算机可读存储介质 |
CN110858178A (zh) * | 2018-08-07 | 2020-03-03 | 广州小鹏汽车科技有限公司 | 一种内存回收方法、装置、设备及介质 |
CN109828885B (zh) * | 2018-12-15 | 2023-02-07 | 中国平安人寿保险股份有限公司 | RocketMQ内存监控方法、装置、电子设备及存储介质 |
CN110704313B (zh) * | 2019-09-25 | 2023-07-25 | 北京宝兰德软件股份有限公司 | Java虚拟机内存泄漏检测方法及装置 |
CN111274060B (zh) * | 2020-02-10 | 2023-07-28 | 广州虎牙科技有限公司 | 一种确定内存异常的方法、装置、设备和存储介质 |
CN112988490B (zh) * | 2021-04-21 | 2021-08-17 | 浙江乾冠信息安全研究院有限公司 | 内存泄露检测方法、装置、电子设备及介质 |
CN117707920A (zh) * | 2023-08-31 | 2024-03-15 | 荣耀终端有限公司 | 内存泄漏定位方法、电子设备及存储介质 |
CN117453446B (zh) * | 2023-12-15 | 2024-04-26 | 荣耀终端有限公司 | 一种内存泄露定位的辅助信息获取方法及电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101599048A (zh) * | 2009-07-01 | 2009-12-09 | 福建星网锐捷网络有限公司 | 一种内存监控的方法和装置 |
CN101794567A (zh) * | 2010-02-10 | 2010-08-04 | 中兴通讯股份有限公司 | 图片加载的方法及终端 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7257692B2 (en) * | 2003-10-01 | 2007-08-14 | Lakeside Software, Inc. | Apparatus and method for detecting memory leaks |
-
2013
- 2013-05-23 CN CN201310195512.3A patent/CN104182320B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101599048A (zh) * | 2009-07-01 | 2009-12-09 | 福建星网锐捷网络有限公司 | 一种内存监控的方法和装置 |
CN101794567A (zh) * | 2010-02-10 | 2010-08-04 | 中兴通讯股份有限公司 | 图片加载的方法及终端 |
Also Published As
Publication number | Publication date |
---|---|
CN104182320A (zh) | 2014-12-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104182320B (zh) | 一种监控内存泄漏的方法及装置 | |
CN111756575B (zh) | 存储服务器的性能分析方法及装置、电子设备 | |
CN107111544B (zh) | 生产诊断中的历史控制流可视化 | |
CN104391795B (zh) | 一种分布式系统中自动化测试覆盖率的测试方法及系统 | |
CN105094783B (zh) | 安卓应用稳定性测试的方法及装置 | |
KR101683321B1 (ko) | 분산 애플리케이션들을 모니터링 하는 방법 | |
CN101295268B (zh) | 面向软件系统的分区存储器转储方法和装置 | |
US8495430B2 (en) | Generate diagnostic data for overdue thread in a data processing system | |
US8141053B2 (en) | Call stack sampling using a virtual machine | |
CN106610892A (zh) | 内存泄漏检测方法和装置 | |
KR20110124733A (ko) | 동적 인스트루먼테이션을 통한 커스텀 코드의 진단을 스트림라인하기위한 메소드 콜의 검출 | |
CN107066390A (zh) | 一种动态内存泄漏检测方法及系统 | |
CN105912458A (zh) | 一种用于动态检测c/c++内存泄露的方法及系统 | |
CN110795357A (zh) | 程序监控方法及装置 | |
CN103389939A (zh) | 一种针对堆可控分配漏洞的检测方法及系统 | |
CN110704303B (zh) | 一种测试覆盖度信息的获取方法及装置 | |
CN109542444A (zh) | Java应用的监控方法、装置、服务器和存储介质 | |
US10956298B2 (en) | Methods and apparatus to detect memory leaks in computing systems | |
US7539833B2 (en) | Locating wasted memory in software by identifying unused portions of memory blocks allocated to a program | |
CN106899436A (zh) | 一种云平台故障预测诊断系统 | |
CN104516817A (zh) | 一种内存泄漏检测方法及装置 | |
Langner et al. | Detection and root cause analysis of memory-related software aging defects by automated tests | |
CN101206616B (zh) | 一种图形界面程序的资源泄漏测试及问题定位方法 | |
CN104778087B (zh) | 一种信息处理方法以及信息处理装置 | |
CN112612697A (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 |