[go: up one dir, main page]

CN111984401B - 一种内存溢出管理方法、装置、电子设备及存储介质 - Google Patents

一种内存溢出管理方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN111984401B
CN111984401B CN202010726007.7A CN202010726007A CN111984401B CN 111984401 B CN111984401 B CN 111984401B CN 202010726007 A CN202010726007 A CN 202010726007A CN 111984401 B CN111984401 B CN 111984401B
Authority
CN
China
Prior art keywords
memory
application program
allocation
space data
stack information
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
CN202010726007.7A
Other languages
English (en)
Other versions
CN111984401A (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.)
Wuba Co Ltd
Original Assignee
Wuba 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 Wuba Co Ltd filed Critical Wuba Co Ltd
Priority to CN202010726007.7A priority Critical patent/CN111984401B/zh
Publication of CN111984401A publication Critical patent/CN111984401A/zh
Application granted granted Critical
Publication of CN111984401B publication Critical patent/CN111984401B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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

Landscapes

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

Abstract

本发明提供了一种内存溢出管理方法、装置、电子设备及存储介质。所述方法,包括:获取目标设备中实时使用的内存空间数据,以及目标设备的内存上限,所述内存空间数据包括堆内存空间数据、虚拟内存空间数据中的至少一种;在所述内存空间数据与所述内存上限之间的距离小于预设数值的情况下,记录内存分配的堆栈信息,并且针对所述目标设备前台运行的应用程序设置内存溢出标识;针对设置有内存溢出标识的每个应用程序,根据所述内存分配的堆栈信息,对所述应用程序进行内存分析。从而取得了无需人工在开发阶段分析内存,节省需求开发中定位问题的时间,同时节约开发时间,提高了开发效率。可以准确的检测OOM造成系统杀死App的问题的有益效果。

Description

一种内存溢出管理方法、装置、电子设备及存储介质
技术领域
本发明涉及计算机技术领域,尤其涉及一种内存溢出管理方法、装置、电子设备及存储介质。
背景技术
App(Application,应用程序)的运行稳定性是保障业务开发的前提,同时也是衡量一个App是否优秀的标准。同时App稳定性越高,用户体验也就更好,相对的用户量也就越高。用户量和日活的增加也就可以促进App的运营收入等以及其它一些隐形福利。所以保证App的稳定性是每一个公司都要面对的一个问题。
App的不稳定因素包括内存使用过高,cpu消耗太大,电量消耗大,经常崩溃等,都会造成App被杀死,那么重新进入App需要走冷启动的流程。目前一般内存方面都是通过xcode中的instrument工具来检测内存的使用情况和内存泄漏,或者使用三方的sdk(Software Development Kit,软件开发工具包)进行检测。但是上述方式需要安装有相应的工具,有太多局限性。而且,没有一个工具化的手段分析App被杀死是因为内存造成的,也很难从源头预防出现OOM(out ofmemory,内存溢出)后导致App被系统杀死的问题。
发明内容
本发明实施例提供一种内存溢出管理方法、装置、电子设备及存储介质,以解决现有的内存的使用情况监测方式有太多局限性,且很难从源头预防出现OOM后导致App被系统杀死的问题。
为了解决上述技术问题,本发明是这样实现的:
第一方面,本发明实施例提供了一种内存溢出管理方法,包括:
获取目标设备中实时使用的内存空间数据,以及所述目标设备的内存上限,所述内存空间数据包括堆内存空间数据、虚拟内存空间数据中的至少一种;
在所述内存空间数据与所述内存上限之间的距离小于预设数值的情况下,记录内存分配的堆栈信息,并且针对所述目标设备前台运行的应用程序设置内存溢出标识;
针对设置有内存溢出标识的每个应用程序,根据所述内存分配的堆栈信息,对所述应用程序进行内存分析。
可选地,在所述针对设置有内存溢出标识的每个应用程序,根据所述内存分配的堆栈信息,对所述应用程序进行内存分析的步骤之前,还包括:
针对所述目标设备前台运行的应用程序,如果所述应用程序收到内存警告,记录内存分配的堆栈信息,并且针对所述应用程序设置内存溢出标识。
可选地,所述记录内存分配的堆栈信息,并且针对所述目标设备前台运行的应用程序设置内存溢出标识的步骤,包括:
在所述目标设备本地为所述应用程序分配的存储空间中,记录内存分配的堆栈信息,并且针对所述应用程序设置内存溢出标识。
可选地,所述针对设置有内存溢出标识的每个应用程序,根据所述内存分配的堆栈信息,对所述应用程序进行内存分析的步骤,包括:
针对设置有内存溢出标识的每个应用程序,如果所述应用程序被杀死,在所述应用程序再次冷启动时,从所述目标设备本地获取所述应用程序对应的的堆栈信息;
根据所述内存分配的堆栈信息,对所述应用程序进行内存分析。
可选地,所述获取目标设备中实时使用的内存空间数据的步骤,包括:
通过hook技术获取所述目标设备中堆内存的分配方法和释放方法,并基于所述堆内存的分配方法和释放方法,获取所述堆内存空间数据;
和/或,通过hook技术获取所述目标设备中虚拟机内存的分配方法和释放方法,并基于所述虚拟机内存的分配方法和释放方法,获取所述虚拟内存空间数据。
第二方面,本发明实施例提供了一种内存溢出管理装置,包括:
内存分配监控模块,用于获取目标设备中实时使用的内存空间数据,以及所述目标设备的内存上限,所述内存空间数据包括堆内存空间数据、虚拟内存空间数据中的至少一种;
定时分析模块,用于在所述内存空间数据与所述内存上限之间的距离小于预设数值的情况下,记录内存分配的堆栈信息,并且针对所述目标设备前台运行的应用程序设置内存溢出标识;
内存分析模块,用于针对设置有内存溢出标识的每个应用程序,根据所述内存分配的堆栈信息,对所述应用程序进行内存分析。
可选地,所述装置,还包括:
内存警告处理模块,用于针对所述目标设备前台运行的应用程序,如果所述应用程序收到内存警告,记录内存分配的堆栈信息,并且针对所述应用程序设置内存溢出标识。
可选地,所述定时分析模块,还用于:
在所述目标设备本地为所述应用程序分配的存储空间中,记录内存分配的堆栈信息,并且针对所述应用程序设置内存溢出标识。
可选地,所述内存分析模块,包括:
内存分配信息获取子模块,用于针对设置有内存溢出标识的每个应用程序,如果所述应用程序被杀死,在所述应用程序再次冷启动时,从所述目标设备本地获取所述应用程序对应的的堆栈信息;
内存分析子模块,用于根据所述内存分配的堆栈信息,对所述应用程序进行内存分析。
可选地,所述内存分配监控模块,包括:
堆内存监控子模块,用于通过hook技术获取所述目标设备中堆内存的分配方法和释放方法,并基于所述堆内存的分配方法和释放方法,获取所述堆内存空间数据;和/或,
虚拟内存监控子模块,用于通过hook技术获取所述目标设备中虚拟机内存的分配方法和释放方法,并基于所述虚拟机内存的分配方法和释放方法,获取所述虚拟内存空间数据。
第三方面,本发明实施例另外提供了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如第一方面所述的内存溢出管理方法的步骤。
第四方面,本发明实施例另外提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的内存溢出管理方法的步骤。
在本发明实施例中,在本发明实施例中,通过检测内存的使用情况并且定时的与目标设备的内存上限进行对比来进行具体的分析,通过分析的最终结论来判断是否存在OOM,如果存在就收集此时内存分配的堆栈信息并且记录OOM标识,以针对设有OOM标识的App进行内存分析。从而取得了无需人工在开发阶段分析内存,节省需求开发中定位问题的时间,同时节约开发时间,提高了开发效率。可以准确的检测OOM造成系统杀死App的问题的有益效果。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例中的一种内存溢出管理方法的步骤流程图;
图2是本发明实施例中的另一种内存溢出管理方法的步骤流程图;
图3是本发明实施例中的一种内存溢出管理方案的流程流程图;
图4是本发明实施例中的一种内存溢出管理装置的结构示意图;
图5是本发明实施例中的另一种内存溢出管理装置的结构示意图;
图6是本发明实施例中的一种电子设备的硬件结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参照图1,示出了本发明实施例中一种内存溢出管理方法的步骤流程图。
步骤110,获取目标设备中实时使用的内存空间数据,以及所述目标设备的内存上限,所述内存空间数据包括堆内存空间数据、虚拟内存空间数据中的至少一种。
如上述,App的运行稳定性是保障业务开发的前提,同时也是衡量一个App是否优秀的标准。而且App的不稳定因素可以包括内存使用过高,CPU(Central ProcessingUnit/Processor,中央处理器)消耗太大,电量消耗大,经常崩溃等,而且上述不稳定因素都会造成App被杀死。那么如何监控App是因为内存适用过高的原因被系统杀死,并且避免后续相应App由于同样原因被杀死呢?在本发明实施例中,提供一种通过检测OOM(out ofmemory,内存溢出)来预防App被系统杀死的策略。
其中,OOM是一种常见的错误类型,通常是开启应用程序过多所导致。在iOS中又可以分为FOOM(Foreground Out OfMemory,前台内存不足)和BOOM(Background OutOfMemory,后台内存不足)。
在本发明实施例中,主要是通过监控目标设备中堆栈开辟的内存空间数据,然后分析总开辟的内存空间数据是否达到目标设备的highwater(内存上限),如果内存空间数据与所述内存上限之间的距离小于预设数值,也即内存空间数据即将达到内存上限,即可以上报一次数据,并且保留调用的堆栈信息。
因此,为了方便进行内存溢出监测,则可以获取目标设备中实时使用的内存空间数据,以及所述目标设备的内存上限,所述内存空间数据包括堆内存空间数据、虚拟内存空间数据中的至少一种。
其中,而且在本发明实施例中,可以通过任何可用方法获取上述的内存空间数据,以及目标设备的内存上限,对此本发明实施例不加以限定。例如,由于目标设备中实时使用的内存空间数据是变化的,因此可以开启定时器等周期性地定时分析统计的目标设备的实时内存使用情况,得到实时使用的内存空间数据,而对于同一设备而言,其内存上限一般是固定值,因此可以获取一次即可,当然根据需求也可以设置周期性获取目标设备的内存上限,对此本发明实施例不加以限定。
另外,在实际应用中,App在运行过程中,可能会占用目标设备的堆内存、虚拟内存等任何可用内存空间。因此在本发明实施例中的内存空间数据包括堆内存空间数据、虚拟内存空间数据中的至少一种。其中,堆内存空间数据可以表征针对堆内存的实时使用情况,虚拟内存空间数据则可以表征针对虚拟内存的实时使用情况。其中,堆内存(heap)是区别于栈区、全局数据区和代码区的另一个内存区域。堆允许程序在运行时动态地申请某个大小的内存空间。虚拟内存别称虚拟存储器(Virtual Memory)。电脑中所运行的程序均需经由内存执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽。为解决该问题,Windows等操作系统中运用了虚拟内存技术,即匀出一部分硬盘空间来充当内存使用。
步骤120,在所述内存空间数据与所述内存上限之间的距离小于预设数值的情况下,记录内存分配的堆栈信息,并且针对所述目标设备前台运行的应用程序设置内存溢出标识。
如果当前获取的实时的内存空间数据与内存上限之间的距离小于预设数值,也即内存空间数据接近内存上限,那么此时相应目标设备存在内存溢出的风险,或是已经出现内存溢出导致的应用程序被强杀等问题。此时为了方便后续分析内存溢出原因,则可以记录当前内存分配的堆栈信息,并且针对目标设备当前在前台运行的应用程序设置内存溢出标识。
其中,内存分配的堆栈信息也即上述的调用的堆栈信息,内存分配的堆栈信息可以记录目标设备中运行的每个App在启动过程、运行过程中的函数调用情况、变量调用情况、内存调用情况、指令执行过程等任何与App运行过程中内存分配相关的信息,也即内存分配的堆栈信息可以记录App在运行过程中的内存分配情况。
而且,一般而言,设备的前台可以同时运行一个应用程序,那么此时所记录的内存分配的堆栈信息,一般而言其中包含目标设备前台当前运行的App的内存分配的堆栈信息。而且,如果所述内存空间数据与所述内存上限之间的距离小于预设数值,则可以表征包含目标设备前台当前运行的App占用内存过多,使得目标设备存在内存溢出的风险,因此为了标识当前导致内存溢出的应用程序,则可以针对目标设备前台当前运行的应用程序设置内存溢出(OOM)标识。其中,预设数值可以根据需求进行自定义设置,对此本发明实施例不加以限定。
其中的内存溢出标识的具体形式可以根据需求进行自定义设置,对此本发明实施例不加以限定。而且,在本发明实施例中,如果是针对前台运行的App进行内存溢出监测,那么此时的内存溢出标识则可以为前台内存溢出标识,也即上述的FOOM标识;相应地,如果是针对后台运行的App进行内存溢出监测,那么此时的内存溢出标识则可以为后台内存溢出标识,也即上述的BOOM标识,对此本发明实施例不加以限定。
而如果目标设置前台可以运行有多个App,那么则可以针对目标设备前台运行的每个应用程序设置内存溢出标识,对此本发明实施例不加以限定。
其次,在本发明实施例中,可以将内存分配的堆栈信息记录在目标设备本地,也可以记录在指定的存储区域,例如云端服务器等,具体可以根据需求进行自定义设置,对此本发明实施例不加以限定。
步骤130,针对设置有内存溢出标识的每个应用程序,根据所述内存分配的堆栈信息,对所述应用程序进行内存分析。
后续为了优化App,避免相应App后续使用过程中再次由于同样原因导致内存溢出,则可以针对设置有内存溢出标识的每个应用程序,根据所述内存分配的堆栈信息,对所述应用程序进行内存分析。
在本发明实施例中,内存分析的具体过程可以根据需求进行自定义设置,对此本发明实施例不加以限定。例如,针对设置有内存溢出标识的任一应用程序,可以根据该应用程序对应的内存分配的堆栈信息,获取其中比较占用内存空间数据的调用操作,以针对相应应用程序提供优化方案等,同时还可以针对相应的调用操作进行优化改进,以降低相应应用程序在运行过程中对内存的占用情况。
参照图2,在本发明实施例中,所述方法,还可以包括:
步骤140,针对所述目标设备前台运行的应用程序,如果所述应用程序收到内存警告,记录内存分配的堆栈信息,并且针对所述应用程序设置内存溢出标识。
在实际应用中,当App运行内存占用比例过高时,相应App也会受到系统发出的内存警告,此时也可以记录内存分配的堆栈信息,并且针对相应App设置内存溢出标识。其中,应用程序收到内存警告的触发条件可以根据需求进行自定义设置,而且不同应用程序收到内存警告的触发条件可以有所不同,也可以完全相同,对此本发明均不加以限定。
例如,可以设置单个的App运行内存占用目标设备总运行内存的一半时,App就会收到内存警告,等等。
可选地,在一实施例中,所述记录内存分配的堆栈信息,并且针对所述目标设备前台运行的应用程序设置内存溢出标识的步骤,进一步可以包括:在所述目标设备本地为所述应用程序分配的存储空间中,记录内存分配的堆栈信息,并且针对所述应用程序设置内存溢出标识。
在本发明实施例中,为了方便在后续针对目标设备中的应用程序进行内存分析,可以在将内存分配的堆栈信息记录至目标设备本地,同时也可以在目标设备本地针对所述应用程序设置内存溢出标识。具体地,可以在所述目标设备本地为其前台运行的应用程序分配的存储空间中,记录内存分配的堆栈信息,并且针对所述应用程序设置内存溢出标识。
如图3所示为本发明实施例中一种内存溢出管理方案的流程示意图。大致可以分为三个步骤。依次为内存分配监控、定时分析、上报。其中,在内存分配监控过程中,可以通过通过hook技术等任何可用方式获取所述目标设备中的内存分配以及内存释放情况,进而统计得到目标设备的实时内存,也即实时使用的内存空间数据,以及内存分配信息,也即上述的内存分配的堆栈信息。在定时分析过程中,可以周期性地比对实时的内存空间数据与目标设备的内存上限,并在所述内存空间数据与所述内存上限之间的距离小于预设数值的情况下,进入上报阶段,也即记录内存分配的堆栈信息,并且针对所述目标设备前台运行的应用程序设置内存溢出标识,以方便后续进行内存分析。另外,也可以将内存分配的堆栈信息,以及针对目标设备前台运行的应用程序设置的内存溢出标识上报至指定存储区域,对此本发明实施例不加以限定。
参照图2,在一实施例中,所述步骤130进一步可以包括:
步骤131,针对设置有内存溢出标识的每个应用程序,如果所述应用程序被杀死,在所述应用程序再次冷启动时,从所述目标设备本地获取所述应用程序对应的的堆栈信息;
步骤132,根据所述内存分配的堆栈信息,对所述应用程序进行内存分析。
在实际应用中,如果目标设备的内存空间数据与所述内存上限之间的距离小于预设数值,但是此时目标设备前台运行的应用程序可能会被强杀,也可能未被强杀。而且,为了进行内存分析,则需要获取相应应用程序对应的的堆栈信息,也即上述内存分配的堆栈信息。在本发明实施例中,为了获取上述的堆栈信息,可以设置专门用于获取堆栈信息以及内存溢出标识的渠道,以便读取内存溢出标识以及堆栈信息进行内存分析。但是设置渠道的方式会增加额外的工作量,而且针对不同的目标设备、应用程序等可能均需要进行设置,增加成本。
在本发明实施例中,为了减少成本,可以在设置有内存溢出标识的应用程序再次冷启动时,从所述目标设备本地获取相应应用程序对应的的堆栈信息。其中,冷启动是指App被后台杀死后,在这个状态打开App,这种启动方式叫做冷启动;热启动:指App没有被后台杀死,仍然在后台运行,再次去打开这个App,这种启动方式叫热启动。
App在冷启动过程中,可以自动读取目标设备本地与相应App相关的数据,此时则可以判断目标设备本地是否有该App的内存溢出标识,如果有说明该App上次被杀死就是内存溢出造成的,然后可以基于本地记录的内存分配的堆栈信息,针对相应App进行内存分析。
参照图2,在一实施例中,所述步骤110进一步可以包括:
步骤111,通过hook技术获取所述目标设备中堆内存的分配方法和释放方法,并基于所述堆内存的分配方法和释放方法,获取所述堆内存空间数据;和/或,
步骤112,通过hook技术获取所述目标设备中虚拟机内存的分配方法和释放方法,并基于所述虚拟机内存的分配方法和释放方法,获取所述虚拟内存空间数据。
在本发明实施例中,为了获取目标设备中实时使用的内存空间数据,可以通过hook技术获取所述目标设备中与内存相关的分配方法和释放方法,统计内存的实时使用情况,以获取内存空间数据。其中,hook的中文译为“挂钩”或“钩子”。在对特定的系统事件进行hook后,一旦发生已hook事件,对该事件进行hook的程序就会收到系统的通知,这时程序就能在第一时间对该事件做出响应。
具体地,为了获取内存空间数据中的堆内存空间数据、虚拟内存空间数据,可以分别通过hook技术获取所述目标设备中堆内存的分配方法和释放方法,并基于所述堆内存的分配方法和释放方法,获取所述堆内存空间数据;和/或,通过hook技术获取所述目标设备中虚拟机(Virtual Machine,VM)内存的分配方法和释放方法,并基于所述虚拟机内存的分配方法和释放方法,以获取所述虚拟内存空间数据。
其中,堆内存的分配方法可以包括与堆内存的分配相关的任何方法,堆内存的释放方法可以包括与堆内存的释放相关的任何方法,堆内存的分配方法和释放方法具体包含的内容也可以根据需求进行自定义设置,对此本发明实施例不加以限定。虚拟机内存的分配方法可以包括与虚拟机内存的分配相关的任何方法,虚拟机内存的释放方法可以包括与虚拟机内存的释放相关的任何方法,虚拟机内存的分配方法和释放方法具体包含的内容也可以根据需求进行自定义设置,对此本发明实施例均不加以限定。
在本发明实施例中,通过检测内存的使用情况并且定时的与目标设备的highwater进行对比来进行具体的分析,通过分析的最终结论来判断是否存在OOM,如果存在就收集此时内存分配的堆栈信息并且记录OOM标识,当冷启动进入的时候判断是否存在标识来判断App上次退出进程是否是因为OOM造成的系统杀死。
而且在本发明实施例中,无需人工在开发阶段分析内存,节省需求开发中定位问题的时间,同时节约开发时间,提高了开发效率。可以准确的检测OOM造成系统杀死App的问题,可以收集到内存的分配信息,提高问题的解决效率。同时,通过OOM检测并进行内存分析可以优化App的内存使用情况,并且优化了App的性能,提高了App在前后台的存活时长。
参照图4,示出了本发明实施例中一种内存溢出管理装置的结构示意图。
本发明实施例的内存溢出管理装置包括:内存分配监控模块210、定时分析模块220和内存分析模块230。
下面分别详细介绍各模块的功能以及各模块之间的交互关系。
内存分配监控模块210,用于获取目标设备中实时使用的内存空间数据,以及所述目标设备的内存上限,所述内存空间数据包括堆内存空间数据、虚拟内存空间数据中的至少一种;
定时分析模块220,用于在所述内存空间数据与所述内存上限之间的距离小于预设数值的情况下,记录内存分配的堆栈信息,并且针对所述目标设备前台运行的应用程序设置内存溢出标识;
内存分析模块230,用于针对设置有内存溢出标识的每个应用程序,根据所述内存分配的堆栈信息,对所述应用程序进行内存分析。
参照图5,在本发明实施例中,所述装置,还包括:
内存警告处理模块240,用于针对所述目标设备前台运行的应用程序,如果所述应用程序收到内存警告,记录内存分配的堆栈信息,并且针对所述应用程序设置内存溢出标识。
可选地,在本发明实施例中,所述定时分析模块220,还用于:在所述目标设备本地为所述应用程序分配的存储空间中,记录内存分配的堆栈信息,并且针对所述应用程序设置内存溢出标识。
参照图5,在本发明实施例中,所述内存分析模块230,包括:
内存分配信息获取子模块231,用于针对设置有内存溢出标识的每个应用程序,如果所述应用程序被杀死,在所述应用程序再次冷启动时,从所述目标设备本地获取所述应用程序对应的的堆栈信息;
内存分析子模块232,用于根据所述内存分配的堆栈信息,对所述应用程序进行内存分析。
参照图5,在本发明实施例中,所述内存分配监控模块210,包括:
堆内存监控子模块211,用于通过hook技术获取所述目标设备中堆内存的分配方法和释放方法,并基于所述堆内存的分配方法和释放方法,获取所述堆内存空间数据;和/或,
虚拟内存监控子模块212,用于通过hook技术获取所述目标设备中虚拟机内存的分配方法和释放方法,并基于所述虚拟机内存的分配方法和释放方法,获取所述虚拟内存空间数据。
本发明实施例提供的内存溢出管理装置能够实现图1至图2的方法实施例中实现的各个过程,为避免重复,这里不再赘述。
优选的,本发明实施例还提供了一种电子设备,包括:处理器,存储器,存储在存储器上并可在处理器上运行的计算机程序,该计算机程序被处理器执行时实现上述内存溢出管理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述内存溢出管理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(RandomAccess Memory,简称RAM)、磁碟或者光盘等。
图6为实现本发明各个实施例的一种电子设备的硬件结构示意图。
该电子设备500包括但不限于:射频单元501、网络模块502、音频输出单元503、输入单元504、传感器505、显示单元506、用户输入单元507、接口单元508、存储器509、处理器510、以及电源511等部件。本领域技术人员可以理解,图6中示出的电子设备结构并不构成对电子设备的限定,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。在本发明实施例中,电子设备包括但不限于手机、平板电脑、笔记本电脑、掌上电脑、车载终端、可穿戴设备、以及计步器等。
应理解的是,本发明实施例中,射频单元501可用于收发信息或通话过程中,信号的接收和发送,具体的,将来自基站的下行数据接收后,给处理器510处理;另外,将上行的数据发送给基站。通常,射频单元501包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器、双工器等。此外,射频单元501还可以通过无线通信系统与网络和其他设备通信。
电子设备通过网络模块502为用户提供了无线的宽带互联网访问,如帮助用户收发电子邮件、浏览网页和访问流式媒体等。
音频输出单元503可以将射频单元501或网络模块502接收的或者在存储器509中存储的音频数据转换成音频信号并且输出为声音。而且,音频输出单元503还可以提供与电子设备500执行的特定功能相关的音频输出(例如,呼叫信号接收声音、消息接收声音等等)。音频输出单元503包括扬声器、蜂鸣器以及受话器等。
输入单元504用于接收音频或视频信号。输入单元504可以包括图形处理器(Graphics Processing Unit,GPU)5041和麦克风5042,图形处理器5041对在视频捕获模式或图像捕获模式中由图像捕获装置(如摄像头)获得的静态图片或视频的图像数据进行处理。处理后的图像帧可以显示在显示单元506上。经图形处理器5041处理后的图像帧可以存储在存储器509(或其它存储介质)中或者经由射频单元501或网络模块502进行发送。麦克风5042可以接收声音,并且能够将这样的声音处理为音频数据。处理后的音频数据可以在电话通话模式的情况下转换为可经由射频单元501发送到移动通信基站的格式输出。
电子设备500还包括至少一种传感器505,比如光传感器、运动传感器以及其他传感器。具体地,光传感器包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板5061的亮度,接近传感器可在电子设备500移动到耳边时,关闭显示面板5061和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别电子设备姿态(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;传感器505还可以包括指纹传感器、压力传感器、虹膜传感器、分子传感器、陀螺仪、气压计、湿度计、温度计、红外线传感器等,在此不再赘述。
显示单元506用于显示由用户输入的信息或提供给用户的信息。显示单元506可包括显示面板5061,可以采用液晶显示器(Liquid Crystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板5061。
用户输入单元507可用于接收输入的数字或字符信息,以及产生与电子设备的用户设置以及功能控制有关的键信号输入。具体地,用户输入单元507包括触控面板5071以及其他输入设备5072。触控面板5071,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板5071上或在触控面板5071附近的操作)。触控面板5071可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器510,接收处理器510发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板5071。除了触控面板5071,用户输入单元507还可以包括其他输入设备5072。具体地,其他输入设备5072可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆,在此不再赘述。
进一步的,触控面板5071可覆盖在显示面板5061上,当触控面板5071检测到在其上或附近的触摸操作后,传送给处理器510以确定触摸事件的类型,随后处理器510根据触摸事件的类型在显示面板5061上提供相应的视觉输出。虽然在图6中,触控面板5071与显示面板5061是作为两个独立的部件来实现电子设备的输入和输出功能,但是在某些实施例中,可以将触控面板5071与显示面板5061集成而实现电子设备的输入和输出功能,具体此处不做限定。
接口单元508为外部装置与电子设备500连接的接口。例如,外部装置可以包括有线或无线头戴式耳机端口、外部电源(或电池充电器)端口、有线或无线数据端口、存储卡端口、用于连接具有识别模块的装置的端口、音频输入/输出(I/O)端口、视频I/O端口、耳机端口等等。接口单元508可以用于接收来自外部装置的输入(例如,数据信息、电力等等)并且将接收到的输入传输到电子设备500内的一个或多个元件或者可以用于在电子设备500和外部装置之间传输数据。
存储器509可用于存储软件程序以及各种数据。存储器509可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器509可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
处理器510是电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器509内的软件程序和/或模块,以及调用存储在存储器509内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。处理器510可包括一个或多个处理单元;优选的,处理器510可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器510中。
电子设备500还可以包括给各个部件供电的电源511(比如电池),优选的,电源511可以通过电源管理系统与处理器510逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
另外,电子设备500包括一些未示出的功能模块,在此不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。
本领域普通技术人员可以意识到,结合本发明实施例中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (10)

1.一种内存溢出管理方法,其特征在于,包括:
获取目标设备中实时使用的内存空间数据,以及所述目标设备的内存上限,所述内存空间数据包括堆内存空间数据、虚拟内存空间数据中的至少一种;
在所述内存空间数据与所述内存上限之间的距离小于预设数值的情况下,记录内存分配的堆栈信息,并且针对所述目标设备前台运行的应用程序设置内存溢出标识;
针对所述目标设备前台运行的应用程序,如果所述应用程序收到内存警告,记录内存分配的堆栈信息,并且针对所述应用程序设置内存溢出标识;
针对设置有内存溢出标识的每个应用程序,根据所述内存分配的堆栈信息,对所述应用程序进行内存分析。
2.根据权利要求1所述的方法,其特征在于,所述记录内存分配的堆栈信息,并且针对所述目标设备前台运行的应用程序设置内存溢出标识的步骤,包括:
在所述目标设备本地为所述应用程序分配的存储空间中,记录内存分配的堆栈信息,并且针对所述应用程序设置内存溢出标识。
3.根据权利要求2中任一项所述的方法,其特征在于,所述针对设置有内存溢出标识的每个应用程序,根据所述内存分配的堆栈信息,对所述应用程序进行内存分析的步骤,包括:
针对设置有内存溢出标识的每个应用程序,如果所述应用程序被杀死,在所述应用程序再次冷启动时,从所述目标设备本地获取所述应用程序对应的堆栈信息;
根据所述内存分配的堆栈信息,对所述应用程序进行内存分析。
4.根据权利要求1所述的方法,其特征在于,所述获取目标设备中实时使用的内存空间数据的步骤,包括:
通过hook技术获取所述目标设备中堆内存的分配方法和释放方法,并基于所述堆内存的分配方法和释放方法,获取所述堆内存空间数据;
和/或,通过hook技术获取所述目标设备中虚拟机内存的分配方法和释放方法,并基于所述虚拟机内存的分配方法和释放方法,获取所述虚拟内存空间数据。
5.一种内存溢出管理装置,其特征在于,包括:
内存分配监控模块,用于获取目标设备中实时使用的内存空间数据,以及所述目标设备的内存上限,所述内存空间数据包括堆内存空间数据、虚拟内存空间数据中的至少一种;
定时分析模块,用于在所述内存空间数据与所述内存上限之间的距离小于预设数值的情况下,记录内存分配的堆栈信息,并且针对所述目标设备前台运行的应用程序设置内存溢出标识;
内存警告处理模块,用于针对所述目标设备前台运行的应用程序,如果所述应用程序收到内存警告,记录内存分配的堆栈信息,并且针对所述应用程序设置内存溢出标识;
内存分析模块,用于针对设置有内存溢出标识的每个应用程序,根据所述内存分配的堆栈信息,对所述应用程序进行内存分析。
6.根据权利要求5所述的装置,其特征在于,所述定时分析模块,还用于:
在所述目标设备本地为所述应用程序分配的存储空间中,记录内存分配的堆栈信息,并且针对所述应用程序设置内存溢出标识。
7.根据权利要求6中任一项所述的装置,其特征在于,所述内存分析模块,包括:
内存分配信息获取子模块,用于针对设置有内存溢出标识的每个应用程序,如果所述应用程序被杀死,在所述应用程序再次冷启动时,从所述目标设备本地获取所述应用程序对应的堆栈信息;
内存分析子模块,用于根据所述内存分配的堆栈信息,对所述应用程序进行内存分析。
8.根据权利要求5所述的装置,其特征在于,所述内存分配监控模块,包括:
堆内存监控子模块,用于通过hook技术获取所述目标设备中堆内存的分配方法和释放方法,并基于所述堆内存的分配方法和释放方法,获取所述堆内存空间数据;和/或,
虚拟内存监控子模块,用于通过hook技术获取所述目标设备中虚拟机内存的分配方法和释放方法,并基于所述虚拟机内存的分配方法和释放方法,获取所述虚拟内存空间数据。
9.一种电子设备,其特征在于,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至4中任一项所述的内存溢出管理方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至4中任一项所述的内存溢出管理方法的步骤。
CN202010726007.7A 2020-07-24 2020-07-24 一种内存溢出管理方法、装置、电子设备及存储介质 Active CN111984401B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010726007.7A CN111984401B (zh) 2020-07-24 2020-07-24 一种内存溢出管理方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010726007.7A CN111984401B (zh) 2020-07-24 2020-07-24 一种内存溢出管理方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN111984401A CN111984401A (zh) 2020-11-24
CN111984401B true CN111984401B (zh) 2024-12-13

Family

ID=73438118

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010726007.7A Active CN111984401B (zh) 2020-07-24 2020-07-24 一种内存溢出管理方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN111984401B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112667152B (zh) * 2020-12-18 2023-04-07 成都佰维存储科技有限公司 堆内存管理方法、装置、可读存储介质及电子设备
CN113468020A (zh) * 2021-06-28 2021-10-01 广州虎牙科技有限公司 内存监控方法、装置、电子设备及计算机可读存储介质
CN113722142B (zh) * 2021-09-02 2023-08-25 北京天融信网络安全技术有限公司 内存不足的原因分析方法、装置、电子设备及存储介质
CN114741208B (zh) * 2022-06-13 2022-09-23 北京智芯微电子科技有限公司 电能表及其内存堆管理方法、内存堆管理装置、存储介质
CN116010204A (zh) * 2022-12-30 2023-04-25 千寻位置网络有限公司 程序内存的溢出预警方法及相关装置
CN117724827A (zh) * 2023-07-03 2024-03-19 荣耀终端有限公司 一种进程的调用栈信息获取方法、电子设备及系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109656779A (zh) * 2018-12-07 2019-04-19 广州市百果园信息技术有限公司 内存监控方法、装置、终端和存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107766128B (zh) * 2016-08-17 2021-01-29 华为技术有限公司 一种启动应用的方法及装置
CN107357656B (zh) * 2017-06-27 2020-10-27 海南飞特同创科技有限公司 一种内存分配方法、移动终端以及计算机可读存储介质
CN111356987B (zh) * 2017-09-18 2021-05-11 深圳传音通讯有限公司 动态内存的识别方法和装置
CN109542689A (zh) * 2018-11-30 2019-03-29 努比亚技术有限公司 应用程序处理方法、终端以及计算机可读存储介质
CN110618946A (zh) * 2019-08-19 2019-12-27 中国第一汽车股份有限公司 堆栈内存分配方法、装置、设备和存储介质
CN110633190B (zh) * 2019-09-26 2023-08-29 北京博睿宏远数据科技股份有限公司 一种应用程序内存监控方法、装置、设备及存储介质
CN111061614B (zh) * 2019-12-23 2023-07-04 无锡中感微电子股份有限公司 一种内存实时监控处理方法和系统

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109656779A (zh) * 2018-12-07 2019-04-19 广州市百果园信息技术有限公司 内存监控方法、装置、终端和存储介质

Also Published As

Publication number Publication date
CN111984401A (zh) 2020-11-24

Similar Documents

Publication Publication Date Title
CN111984401B (zh) 一种内存溢出管理方法、装置、电子设备及存储介质
CN107800651B (zh) 应用程序关闭方法、装置、存储介质和电子设备
CN108845853B (zh) 一种应用程序启动方法及移动终端
CN108459797B (zh) 一种折叠屏的控制方法及移动终端
CN108073458B (zh) 内存回收方法、移动终端及计算机可读存储介质
CN108874280B (zh) 屏幕划分方法、终端及计算机可读存储介质
CN108111676B (zh) 一种应用程序控制方法、移动终端及计算机可读存储介质
CN108681498B (zh) 一种cpu占用率的监测方法、装置以及移动终端
CN108984066B (zh) 一种应用程序图标显示方法及移动终端
CN108322602B (zh) 一种处理应用无响应的方法、终端和计算机可读存储介质
CN110308834B (zh) 应用图标显示方式的设置方法及终端
CN109995862B (zh) 一种资源调度方法及终端
JP2023502414A (ja) 対象表示方法及び電子機器
CN108601048B (zh) 一种流量控制方法及移动终端
CN108009031B (zh) 一种应用程序的控制方法及移动终端
CN111752688B (zh) 一种数据获取方法、装置、电子设备及存储介质
CN107277364B (zh) 一种拍摄方法、移动终端及计算机可读存储介质
CN110309003B (zh) 信息提示方法及移动终端
CN108762641B (zh) 一种文本编辑方法及终端设备
CN108089935B (zh) 一种应用程序的管理方法及移动终端
CN108170360B (zh) 一种手势功能的控制方法及移动终端
CN108093119B (zh) 一种陌生来电号码的标记方法及移动终端
CN108388459B (zh) 一种消息显示处理方法及移动终端
CN107688498B (zh) 应用程序处理方法和装置、计算机设备、存储介质
CN111427644B (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