资源监控方法、装置、电子设备及存储介质

著录项
  • CN202010018758.3
  • 20200108
  • CN111258752A
  • 20200609
  • 广州虎牙科技有限公司
  • 王道新
  • G06F9/50
  • G06F9/50 G06F11/30

  • 广东省广州市番禺区钟村街(汉溪商业中心)泽溪街13号1301
  • 广东(44)
  • 北京超凡宏宇专利代理事务所(特殊普通合伙)
  • 张欣欣
摘要
本申请提供一种资源监控方法、装置、电子设备及存储介质。目标应用程序运行期间,调用监测代码监测资源申请操作以及资源释放操作;根据资源申请操作的操作结果与资源释放操作的操作结果,对预设存储位置中的资源标识进行更新,资源标识与待释放的资源相对应;在目标应用程序退出时,检测该预设存储位置中记录的资源标识是否为空;若该预设存储位置中记录的资源标识不为空,则向用户提供资源未完全释放的提示信息。如此,实现对目标应用程序中未释放资源的监控。
权利要求

1.一种资源监控方法,其特征在于,应用于电子设备,该电子设备配置有目标应用程序,该目标应用程序中包括监测代码,所述监测代码在该目标应用程序编译期间插入到该目标应用程序源代码的预设位置,用以拦截该目标应用程序执行的资源申请操作以及资源释放操作,所述方法包括:

该目标应用程序运行期间,调用所述监测代码监测所述资源申请操作以及所述资源释放操作;

根据所述资源申请操作的操作结果与所述资源释放操作的操作结果,对预设存储位置中的资源标识进行更新,所述资源标识与待释放的资源相对应;

在所述目标应用程序退出时,检测该预设存储位置中记录的资源标识是否为空;

若该预设存储位置中记录的资源标识不为空,则向用户提供资源未完全释放的提示信息。

2.根据权利要求1所述的资源监控方法,其特征在于,所述资源申请操作以及所述资源释放操作由所述电子设备调用目标对象完成,该目标对象在所述目标应用程序运行时基于计算机语言编写的类创建;所述调用所述监测代码监测所述资源申请操作以及所述资源释放操作的步骤,包括:

调用所述监测代码监测该目标对象所执行的所述资源申请操作以及所述资源释放操作。

3.根据权利要求2所述的资源监控方法,其特征在于,所述目标应用程序运行于Android操作系统,所述目标对象与该目标应用程序中的目标Java类相对应,所述目标Java类为所述Android操作系统中Closeable接口的实现类。

4.根据权利要求3所述的资源监控方法,其特征在于,所述调用所述监测代码监测所述资源申请操作以及所述资源释放操作的步骤包括:

通过所述监测代码拦截该目标对象执行openFileOutput()方法以及执行close()方法,监测该目标对象所执行的所述资源申请操作以及所述资源释放操作。

5.根据权利要求3所述的资源监控方法,其特征在于,所述监测代码由工具AspectJ在该目标应用程序编译期间插入到该目标应用程序的序源代码的预设位置。

6.根据权利要求3所述的资源监控方法,其特征在于,所述提示信息携带有所述目标对象的Java栈调用信息。

7.根据权利要求1-6任意一项所述的资源监控方法,其特征在于,该电子设备与服务器通信连接,若该预设存储位置中记录的资源标识不为空,则向用户提供资源未完全释放的提示信息的步骤,包括:

若该预设存储位置中记录的资源标识不为空,则向所述服务器发送资源未完全释放的提示信息,以使所述服务器提醒所述用户。

8.根据权利要求1所述的资源监控方法,其特征在于,所述方法还包括:

若该预设存储位置中记录的资源标识不为空,则根据该预设存储位置中记录的资源标识将对应的待释放的资源进行释放。

9.一种资源监控装置,其特征在于,应用于电子设备,该电子设备配置有目标应用程序,该目标应用程序中包括监测代码,所述监测代码在该目标应用程序编译期间插入到该目标应用程序源代码的预设位置,用以拦截该目标应用程序执行的资源申请操作以及资源释放操作,所述资源监控装置包括操作监测模块、标识更新模块、标识检测模块以及信息提示模块;

所述操作监测模块用于该目标应用程序运行期间,调用所述监测代码监测所述资源申请操作以及所述资源释放操作;

所述标识更新模块用于根据所述资源申请操作的操作结果与所述资源释放操作的操作结果,对预设存储位置中的资源标识进行更新,所述资源标识与待释放的资源相对应;

所述标识检测模块用于在所述目标应用程序退出时,检测该预设存储位置中记录的资源标识是否为空;

所述信息提示模块用于若该预设存储位置中记录的资源标识不为空,则向用户提供资源未完全释放的提示信息。

10.一种电子设备,其特征在于,该电子设备包括处理器以及存储器,该存储器存储有能够被该处理器执行的机器可执行指令,该处理器执行该机器可执行指令时,实现如权利要求1-8任一项所述的资源监控方法。

11.一种存储介质,其特征在于,该存储介质存储有计算机程序,该计算机程序被执行时,实现如权利要求1-8任一项所述的资源监控方法。

说明书
技术领域

本申请涉及计算机领域,具体而言,涉及一种资源监控方法、装置、电子设备及存储介质。

程序运行期间,需要申请一些必要的资源,并在使用之后进行释放。例如,常见的文件访问操作以及数据库访问操作等。若申请的资源在使用之后未进行释放,则会发生资源泄露。在发生资源泄露之后,其他程序若再次申请该资源,则会申请失败,继而影响其他程序的正常运行。

目前,开发人员在开发过程中凭靠记忆来确保资源使用完毕后,释放申请的资源。该方式难免会因为开发人员的疏忽,发生资源泄露。因此,如何获知程序运行过程中是否发生资源泄露对程序的稳定运行具有重要意义。

为了克服现有技术中的至少一个不足,本申请实施例的目的之一在于提供一种资源监控方法,应用于电子设备,该电子设备配置有目标应用程序,该目标应用程序中包括监测代码,所述监测代码在该目标应用程序编译期间插入到该目标应用程序源代码的预设位置,用以拦截该目标应用程序执行的资源申请操作以及资源释放操作,所述方法包括:

该目标应用程序运行期间,调用所述监测代码监测所述资源申请操作以及所述资源释放操作;

根据所述资源申请操作的操作结果与所述资源释放操作的操作结果,对预设存储位置中的资源标识进行更新,所述资源标识与待释放的资源相对应;

在所述目标应用程序退出时,检测该预设存储位置中记录的资源标识是否为空;

若该预设存储位置中记录的资源标识不为空,则向用户提供资源未完全释放的提示信息。

可选地,所述资源申请操作以及所述资源释放操作由所述电子设备调用目标对象完成,该目标对象在所述目标应用程序运行时基于计算机语言编写的类创建;所述调用所述监测代码监测所述资源申请操作以及所述资源释放操作的步骤,包括:

调用所述监测代码监测该目标对象所执行的所述资源申请操作以及所述资源释放操作。

可选地,所述目标应用程序运行于Android操作系统,所述目标对象与该目标应用程序中的目标Java类相对应,所述目标Java类为所述Android操作系统中Closeable接口的实现类。

可选地,所述调用所述监测代码监测所述资源申请操作以及所述资源释放操作的步骤包括:

通过所述监测代码拦截该目标对象执行openFileOutput()方法以及执行close()方法,监测该目标对象所执行的所述资源申请操作以及所述资源释放操作。

可选地,所述监测代码由工具AspectJ在该目标应用程序编译期间插入到该目标应用程序的序源代码的预设位置。

可选地,所述提示信息携带有所述目标对象的Java栈调用信息。

可选地,该电子设备与服务器通信连接,若该预设存储位置中记录的资源标识不为空,则向用户提供资源未完全释放的提示信息的步骤,包括:

若该预设存储位置中记录的资源标识不为空,则向所述服务器发送资源未完全释放的提示信息,以使所述服务器提醒所述用户。

可选地,所述方法还包括:

若该预设存储位置中记录的资源标识不为空,则根据该预设存储位置中记录的资源标识将对应的待释放的资源进行释放。

本申请实施例的目的之二在于提供一种资源监控装置,应用于电子设备,该电子设备配置有目标应用程序,该目标应用程序中包括监测代码,所述监测代码在该目标应用程序编译期间插入到该目标应用程序源代码的预设位置,用以拦截该目标应用程序执行的资源申请操作以及资源释放操作,所述资源监控装置包括操作监测模块、标识更新模块、标识检测模块以及信息提示模块;

所述操作监测模块用于该目标应用程序运行期间,调用所述监测代码监测所述资源申请操作以及所述资源释放操作;

所述标识更新模块用于根据所述资源申请操作的操作结果与所述资源释放操作的操作结果,对预设存储位置中的资源标识进行更新,所述资源标识与待释放的资源相对应;

所述标识检测模块用于在所述目标应用程序退出时,检测该预设存储位置中记录的资源标识是否为空;

所述信息提示模块用于若该预设存储位置中记录的资源标识不为空,则向用户提供资源未完全释放的提示信息。

本申请实施例的目的之三在于提供一种电子设备,该电子设备包括处理器以及存储器,该存储器存储有能够被该处理器执行的机器可执行指令,该处理器执行该机器可执行指令时,实现该资源监控方法。

本申请实施例的目的之四在于提供一种存储介质,该存储介质存储有计算机程序,该计算机程序被执行时,实现该资源监控方法。

相对于现有技术而言,本申请具有以下有益效果:

本申请实施例提供一种资源监控方法、装置、电子设备及存储介质。通过该监测代码拦截该应用软件在运行期间的资源申请操作以及资源释放操作,实现对该目标应用程序的运行过程的监控,并将待释放的资源标识记录到预设位置。在目标应用程序退出时,检测该预设位置中的资源标识是否为空,以监测是否存在资源泄露。

为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例提供的电子设备的硬件结构图;

图2为本申请实施例提供的资源监控方法的步骤流程图;

图3为本申请实施例提供的操作监控示意图;

图4为本申请实施例提供的资源监控装置的结构示意图。

图标:100-电子设备;110-资源监控装置;120-存储器;130-处理器;1101-操作监测模块;1102-标识更新模块;1103-标识检测模块;1104-信息提示模块。

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

如背景技术部分所述介绍,如何获知程序运行过程中是否发生资源泄露对程序的稳定运行具有重要意义。

鉴于此,本申请实施例提供一种资源监控方法,应用于电子设备。该电子设备100可以是,但不限于,智能手机、个人电脑(personal computer,PC)、平板电脑、个人数字助理(personal digital assistant,PDA)、移动上网设备(mobile Internet device,MID)等。请参照图1,图1为该电子设备的硬件结构示意图,包括资源监控装置110、存储器120以及处理器130。

所述存储器120、处理器130各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。所述资源监控装置110包括至少一个可以软件或固件(firmware)的形式存储于所述存储器120中或固化在所述电子设备100的操作系统(operating system,OS)中的软件功能模块。所述处理器130用于执行所述存储器120中存储的可执行模块,例如所述资源监控装置110所包括的软件功能模块及计算机程序等。

其中,所述存储器120可以是,但不限于,随机存取存储器(Random AccessMemory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(ProgrammableRead-Only Memory,PROM),可擦除只读存储器(Erasable Programmable Read-OnlyMemory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-OnlyMemory,EEPROM)等。其中,存储器120用于存储程序,所述处理器130在接收到执行指令后,执行所述程序。

所述处理器130可能是一种集成电路芯片,具有信号的处理能力。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

请参照图2,图2为应用于图1所示的电子设备100的一种资源监控方法的流程图,以下将对所述方法包括各个步骤进行详细阐述。其中,该电子设备配置有目标应用程序,该目标应用程序中包括监测代码,所述监测代码在该目标应用程序编译期间插入到该目标应用程序源代码的预设位置。请参照图3,该监测代码用以拦截该目标应用程序执行的资源申请操作以及资源释放操作。

步骤S100,目标应用程序运行期间,调用监测代码监测资源申请操作以及所述资源释放操作。

其中,该申请资源操作所申请的资源可以是,但不限于,硬件资源以及虚拟资源。其中,该硬件资源可以是内存中存储区域、外设接口(例如,串口、SPI接口以及USB接口等);该虚拟资源可以是网络地址的某个端口号。

步骤S200,根据资源申请操作的操作结果与资源释放操作的操作结果,对预设存储位置中的资源标识进行更新,资源标识与待释放的资源相对应。

例如,在一种可能的示例中,以该目标应用程序在运行过程中需要读取配置文件为例。该目标应用程序一旦打开该配置文件,该电子设备调用该监测代码拦击该打开该配置文件的操作,并获取操作结果。若该操作结果显示成功打开该配置文件,则将申请该配置文件所获得的资源标识记录到预设存储位置。

该目标应用程序一旦关闭该配置文件,该电子设备调用该监测代码拦击该关闭该配置文件的操作,并获取操作结果。若该操作结果显示关闭该配置文件成功,则将申请该配置文件所获得的资源标识记从预设存储位置中清除。

其中,针对该资源标识,作为一种可能的实施方式,该资源标识可以包括所申请资源的唯一标识、申请该资源的时间以及执行申请资源的代码详情。

步骤S300,在目标应用程序退出时,检测该预设存储位置中记录的资源标识是否为空。

步骤S400,若该预设存储位置中记录的资源标识不为空,则向用户提供资源未完全释放的提示信息。

如此,通过该监测代码拦截该目标应用程序在运行期间的资源申请操作以及资源释放操作,实现对该目标应用程序的运行过程的监控,并将待释放的资源标识记录到预设位置。在目标应用程序退出时,检测该预设位置中的资源标识是否为空,以监测是否存在资源泄露。

可选地,该资源申请操作以及所述资源释放操作由该电子设备调用目标对象完成,该目标对象在所述目标应用程序运行时基于计算机编语言所编写的类创建。基于此,该电子设备调用该监测代码监测该目标对象所执行的所述资源申请操作以及所述资源释放操作。

针对该目标应用程序,作为一种可能的实施方式,所述目标应用程序运行于Android操作系统,所述目标对象与该目标应用程序中的目标Java类相对应。

若该目标应用程序运行于Android操作系统,针对目标Java类,作为一种可能的实施方式,所述目标Java类为所述Android操作系统中Closeable接口的实现类。

应理解,Android操作系统中将申请资源操作以及关闭资源操作抽象成Closeable接口,以便其他需要申请资源的具体的Java类,根据具体的操作需求实现该Closeable接口。

例如,针对用于读写文件的Java类,需要针对读写文件这一需求对该Closeable接口编写具体的读写文件操作代码。针对用于操作网卡的Java类,需要针对发送与接收网络报文这一需求对Closeable接口编写具体的网络报文收发代码。

具体的,该电子设备通过该监测代码拦截该目标对象执行openFileOutput()方法以及执行close()方法,监测该目标对象所执行的所述资源申请操作以及所述资源释放操作。

为了实现该监测代码能够拦截该目标对象执行openFileOutput()方法以及执行close()方法。作为一种可能的实施方式,所述监测代码由工具AspectJ在该目标应用程序编译期间插入到该目标应用程序的序源代码的预设位置。

应理解,AspectJ作为Java中的AOP库,基于AspectJ可实现Android操作系统下的目标应用程序在编译期动态插入符合特定条件的代码。

例如,可以通过如下配置方式使得该监测代码能够拦截该目标对象执行openFileOutput()方法:

@Around("call(*android.content.Context.openFileOutput(..))")

同理,可以通过如下配置方式使得该监测代码能够拦截该目标对象执行close()方法:

@Before("call(*java.io.Closeable.close())")

可选的,在监测到目标应用程序运行期间资源未完全释放时,作为一种可能的实施方式,该电子设备与服务器通信连接。目标应用程序在退出时,该电子设备检测到该预设存储位置中记录的资源标识不为空,则向所述服务器发送资源未完全释放的提示信息,以使所述服务器提醒用户。

应理解,即使经过严格测试的目标应用程序,在发布给用户使用的过程中,由于用户使用的具体环境比测试环境更为复杂,可能会导致目标应用程序在特定的场景不能正常执行资源释放操作。

例如,用户安装有各种应用程序,各应用程序之间存在相互影响,使得目标应用程序在执行资源释放操作时,被其他应用程序中断。

因此,以Android系统为例,目标应用程序在退出时,该电子设备检测到该预设存储位置中记录的资源标识不为空,则向所述服务器发送资源未完全释放的提示信息,以使所述服务器提醒用户,该用户可以是与该目标应用程序相关开发人员。如此,以便于开发人员及时处理。

应理解,由于该预设位置的资源标识可以包括所申请资源的唯一标识、申请该资源的时间、执行申请资源的代码详情以及释放所申请资源的代码详情。

针对该执行申请资源的代码详情以及释放所申请资源的代码详情,作为一种可能的实施方式,可以是Android系统中目标对象的Java栈调用信息。因此,该提示信息可以携带有目标对象的Java栈调用信息,以方便开发人员快速定位资源未完全释放的原因。

进一步的,若电子设备中存在多个应用程序,电子设备中存在未释放的资源,可能会影响其他应用程序的正常运行。鉴于此,由于该预设位置的资源标识可以包括所申请资源的唯一标识;因此,若该预设存储位置中记录的资源标识不为空,在向服务器发送提示信息的同时,该电子设备还可以根据资源标识中所申请资源的唯一标识释放对应的资源。

本申请实施例还提供一种资源监控装置110,应用于电子设备,该电子设备配置有目标应用程序,该目标应用程序中包括监测代码,所述监测代码在该目标应用程序编译期间插入到该目标应用程序源代码的预设位置,用以拦截该目标应用程序执行的资源申请操作以及资源释放操作。请参照图4,从功能上划分,资源监控装置110可以包括操作监测模块1101、标识更新模块1102、标识检测模块1103以及信息提示模块1104。

该操作监测模块1101用于该目标应用程序运行期间,调用所述监测代码监测所述资源申请操作以及所述资源释放操作。

在本申请实施例中,该操作监测模块1101用于执行图2中的步骤S100,关于该操作监测模块1101的详细描述可以参考步骤S100的详细描述。

该标识更新模块1102用于根据所述资源申请操作的操作结果与所述资源释放操作的操作结果,对预设存储位置中的资源标识进行更新,所述资源标识与待释放的资源相对应;

在本申请是实施例中,该标识更新模块1102用于执行图2中的步骤S200,关于该标识更新模块1102的详细描述可以参考步骤S200的详细描述。

该标识检测模块1103用于在所述目标应用程序退出时,检测该预设存储位置中记录的资源标识是否为空。

在本申请实施例中,该标识检测模块1103用于执行图2中的步骤S300,关于该标识检测模块1103的详细描述可以参考步骤S300的详细描述。

该信息提示模块1104用于若该预设存储位置中记录的资源标识不为空,则向用户提供资源未完全释放的提示信息。

在本申请实施例中,该信息提示模块1104用于执行图2中的步骤S400,关于该信息提示模块1104的详细描述可以参考步骤S400的详细描述。

本申请实施例还提供一种电子设备,该电子设备包括处理器以及存储器,该存储器存储有能够被该处理器执行的机器可执行指令,该处理器执行该机器可执行指令时,实现所述资源监控方法。

本申请是实施例还提供一种存储介质,该存储介质存储有计算机程序,该计算机程序被执行时,实现所述资源监控方法。

综上所述,本申请实施例提供一种资源监控方法、装置、电子设备及存储介质。通过该监测代码拦截该应用软件在运行期间的资源申请操作以及资源释放操作,实现对该目标应用程序的运行过程的监控,并将待释放资源标识记录到预设位置。在目标应用程序退出时,检测该预设位置中的资源标识是否为空,以监测是否存在资源泄露。

在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述,仅为本申请的各种实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

本文发布于:2024-09-23 08:28:13,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/87013.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议