CN112214388A - 内存监控方法、装置、设备及计算机可读存储介质 - Google Patents
内存监控方法、装置、设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN112214388A CN112214388A CN202011218025.0A CN202011218025A CN112214388A CN 112214388 A CN112214388 A CN 112214388A CN 202011218025 A CN202011218025 A CN 202011218025A CN 112214388 A CN112214388 A CN 112214388A
- Authority
- CN
- China
- Prior art keywords
- memory
- instruction
- monitoring
- target application
- memory allocation
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3409—Recording 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 for performance assessment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3037—Monitoring 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供了一种内存监控方法、装置、设备及计算机可读存储介质,应用于云技术领域,所述方法包括:响应于目标应用的启动事件,上传与目标应用相关的初始化信息至服务器;接收服务器发送的配置指令;配置指令是基于初始化信息生成的;根据配置指令对目标应用的监控组件进行配置;通过配置后的监控组件监控目标应用,得到内存分配数据;将内存分配数据上传至服务器,以使服务器根据内存分配数据对目标应用的内存使用情况进行评测。通过本申请提供的内存监控方法,能够实现对目标应用的动态监测,同时,避免监控组件对目标应用进行监控时造成的性能影响,提升了目标应用对应的服务功能的响应效率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种内存监控方法、装置、设备及计算机可读存储介质。
背景技术
在对应用程序进行开发及发布的过程中,需要对应用程序进行测评。例如,利用极端使用场景对该应用程序进行性能专项测试,在专项测试通过后才能完成开发,并发布到相关程序平台。
在测试应用程序的过程中,应用程序通常会由于内存爆炸导致应用程序对应的进程崩溃,开发人员需要确定发生问题的位置。因此需要对该应用程序对内存的使用情况进行监控,以完成问题定位。
相关技术中对应用程序进行内存监控的方案,会占用终端较多的计算资源,并且无法适配不同场景下的应用程序,测评准确度较低。
发明内容
本申请实施例提供一种内存监控方法、装置、设备及计算机可读存储介质,能够实现对目标应用的动态监测,同时,避免监控组件对目标应用进行监控时造成的性能影响,提升了目标应用对应的服务功能的响应效率。
本申请实施例的技术方案是这样实现的:响应于目标应用的启动事件,上传与目标应用相关的初始化信息至服务器;接收服务器发送的配置指令;配置指令是基于初始化信息生成的;根据配置指令对目标应用的监控组件进行配置;通过配置后的监控组件监控目标应用,得到内存分配数据;将内存分配数据上传至服务器,以使服务器根据内存分配数据对目标应用的内存使用情况进行评测。
在本申请的一些实施例中,所述根据配置指令对目标应用的监控组件进行配置,包括:根据配置指令和存储于本地磁盘中的至少一个历史云指令,生成至少一个云指令;根据至少一个云指令对监控组件进行配置。
在本申请的一些实施例中,所述根据配置指令和存储于本地磁盘中的至少一个历史云指令,生成至少一个云指令,包括:解析配置指令,得到至少一条待更新云指令;遍历存储于本地磁盘中的至少一个历史云指令,并加载至内存,得到历史云指令列表;根据至少一条待更新云指令对历史云指令列表进行更新,得到云指令列表;云指令列表包括至少一个云指令。
在本申请的一些实施例中,所述根据至少一条待更新云指令对历史云指令列表进行更新,得到云指令列表,包括:在待更新云指令为更新类型的情况下,在历史云指令列表中查找待更新云指令对应的目标云指令,根据待更新云指令对目标云指令进行更新;在待更新云指令为移除类型的情况下,在历史云指令列表中查找待更新云指令对应的目标云指令,将目标云指令从历史云指令列表中移除。
在本申请的一些实施例中,所述方法还包括:将至少一个云指令存储于本地磁盘中,并覆盖至少一个历史云指令。
在本申请的一些实施例中,所述方法还包括:在根据至少一条待更新云指令对历史云指令列表进行更新的过程中,保存更新记录;响应于得到云指令列表,将更新记录上传至服务器。
在本申请的一些实施例中,所述根据至少一个云指令对监控组件进行配置,包括:解析至少一个云指令,得到监控配置参数;监控配置参数包括以下至少之一:适配版本参数、监控时间、监控开启参数和周期开启参数;利用监控配置参数对监控组件进行配置。
在本申请的一些实施例中,所述通过配置后的监控组件监控目标应用,得到内存分配数据,包括:在对目标应用分配内存的过程中,获取每一内存分配对象对应的分配信息;分配信息包括内存分配对象的大小信息和堆栈信息;根据每一内存分配对象的大小信息和堆栈信息,生成内存分配数据。
在本申请的一些实施例中,所述根据每一内存分配对象的大小信息和堆栈信息,生成内存分配数据,包括:在内存分配对象的大小信息超过预设的触顶阈值的情况下,将内存分配对象的大小信息和堆栈信息记录至内存中的哈希表;将哈希表转存至本地磁盘中,以得到内存分配数据。
在本申请的一些实施例中,所述将哈希表转存至本地磁盘中,以得到内存分配数据,包括:响应于触发指令,将哈希表转存至本地磁盘中,以得到内存分配数据;触发指令包括以下至少之一:通过定时触发装置所产生的定时触发指令;内存负载高于预设阈值时产生的负载触发指令;目标应用中进程崩溃时产生的崩溃触发指令;目标应用停止运行时产生的停止触发指令。
在本申请的一些实施例中,所述将内存分配数据上传至服务器,包括:根据内存分配数据生成至少一条日志记录,并将至少一条日志记录写入数据库中;响应于上传指令,通过数据库上传将至少一条日志记录至服务器;上传指令包括以下至少之一:目标应用启动时产生的上传指令;网络变化时产生的上传指令;目标应用进入后台时产生的上传指令。
在本申请的一些实施例中,所述根据内存分配数据生成至少一条日志记录,包括:响应于目标应用的下一次启动事件,将内存分配数据加载至内存中;将内存中的内存分配数据转换为日志数据模型;日志数据模型包括至少一条日志记录。
在本申请的一些实施例中,所述通过数据库上传将至少一条日志记录至服务器,包括:依次提取数据库中的待上传日志记录并上传至服务器,在待上传日志记录上传成功的情况下,将待上传日志从数据库中移除,直至数据库为空。
本申请实施例提供一种内存监控装置,所述装置包括:
第一上传模块,用于响应于目标应用的启动事件,上传与目标应用相关的初始化信息至服务器;
接收模块,用于接收服务器发送的配置指令;配置指令是基于初始化信息生成的;
配置模块,用于根据配置指令对目标应用的监控组件进行配置;
监控模块,用于通过配置后的监控组件监控目标应用,得到内存分配数据;
第二上传模块,用于将内存分配数据上传至服务器,以使服务器根据内存分配数据对目标应用的内存使用情况进行评测。
本申请实施例提供一种内存监控设备,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本申请实施例提供的内存监控方法。
本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本申请实施例提供的内存监控方法。
本申请实施例具有以下有益效果:
本申请实施例通过由服务器根据与目标应用相关的初始化信息生成的配置指令对监控组件进行配置,使得经过该配置指令配置的监控程序更加适合当前终端中的目标应用,提升了内存监控的准确性。并且,由于本申请监控组件只获取内存分配数据,并不对该内存分配数据进行分析,通过将内存分配数据的分析,及对该目标应用的内存使用情况进行评测的过程放在服务器中执行,降低了控制组件在监控应用程序中所需的计算资源,可以避免监控组件对目标应用进行监控时造成的性能影响,提升了目标应用对应的服务功能的响应效率。
附图说明
图1是本申请实施例提供的内存监控系统的一个可选的架构示意图;
图2是本申请实施例提供的内存监控设备的结构示意图;
图3是本申请实施例提供的内存监控方法的一个可选的流程示意图;
图4是本申请实施例提供的内存监控方法的一个可选的流程示意图;
图5是本申请实施例提供的内存监控方法的一个可选的流程示意图;
图6是本申请实施例提供的内存监控方法的一个可选的流程示意图;
图7是本申请实施例提供的内存监控方法的一个可选的流程示意图;
图8是本申请实施例提供的内存分配监控方法的一个可选的监控示意图;
图9是本申请实施例提供的内存分配监控系统的一个可选的系统架构示意图;
图10是本申请实施例提供的内存监控方法的一个可选的流程示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使在本实施例中描述的本申请实施例能够以除了在在本实施例中图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
首先,对本申请实施例中涉及的名词进行简单介绍:
性能测评:对监控APP(应用程序)的某些性能专项进行测试,用以评估监控APP的整体状况是否良好,并为进一步的优化和改进提供依据和方案。
内存爆炸(out-of-memory,OOM):内存超过了使用限制,由于iOS的Jetsam机制导致了系统崩溃(Crash)。
前台内存爆炸(Foreground-out-of-memory,FOOM):APP监控在前台消耗过多的内存引起系统的强杀导致崩溃(Crash)。
Jetsam机制:iOS监控系统不支持交换空间机制,出现内存不足时,发出清理内存警告。如果警告后仍然超过内存阈值,APP会被系统杀死。其中,交换空间机制:作为物理内存的扩展,Linux监控会在物理内存不足时,使用交换分区的虚拟内存,更详细地说,就是内核会将暂时内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间。这样一来,物理内存得到了释放,这块内存就可以用于其他目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。
mmap:一种内存映射文件的方法。将一个文件或者其他对象映射到进程的地址空间。实现这种映射关系后,写文件的过程中进程不会有额外的文件的数据拷贝操作,避免内核空间和用户空间的频繁切换,即写内存表示写入文件。
DUMP:即转储(也称转存)。DUMP到文件意味着将内存中的数据转储为静态(文件)格式。DUMP文件,表示转储后的文件。
符号表:指在项目编译后,在编译生成的二进制文件的同级目录下生成的同名的dSYM文件。dSYM文件其实是一个目录,在子目录中包含了一个16进制的保存函数地址映射信息的中转文件,也称之为调试符号信息文件。
参见图1,图1是本申请实施例提供的内存监控系统100的一个可选的架构示意图,为实现支撑一个内存监控应用,终端(示例性示出了终端400-1和终端400-2)通过网络300连接服务器200,网络300可以是广域网或者局域网,又或者是二者的组合。图1还示出了服务器200可以为服务器集群,该服务器集群包括服务器200-1至200-3,同样地,服务器200-1至200-3可以是实体机器,也可以是利用虚拟化技术(如容器技术及虚拟机技术等)构建的虚拟机器,本申请实施例对此不做限定,当然,在本实施例中也可使用单个服务器来进行服务的提供。
本申请实施例可以借助于云技术(Cloud Technology)实现,云技术是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。
云技术基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、以及应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,例如,教育系统的门户网站。
作为示例,服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、以及智能手表等,但并不局限于此。终端以及服务器200可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例中不做限制。
参见图2,图2是本申请实施例提供的内存监控设备500的结构示意图,图2所示的内存监控设备500包括:至少一个处理器510、存储器550、至少一个网络接口520和用户接口530。内存监控设备500中的各个组件通过总线系统540耦合在一起。可理解,总线系统540用于实现这些组件之间的连接通信。总线系统540除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统540。
处理器510可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口530包括使得能够呈现媒体内容的一个或多个输出装置531,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口530还包括一个或多个输入装置532,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器550包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本申请实施例描述的存储器550旨在包括任意适合类型的存储器。存储器550可选地包括在物理位置上远离处理器510的一个或多个存储设备。
在本申请的一些实施例中,存储器550能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统551,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块552,用于经由一个或多个(有线或无线)网络接口520到达其他计算设备,示例性的网络接口520包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等;
显示模块553,用于经由一个或多个与用户接口530相关联的输出装置531(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
输入处理模块554,用于对一个或多个来自一个或多个输入装置532之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在本申请的一些实施例中,本申请实施例提供的内存监控装置可以采用软硬件结合的方式实现,作为示例,本申请实施例提供的内存监控装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的内存监控方法。
在本申请的一些实施例中,本申请实施例提供的内存监控装置可以采用软件方式实现,图2示出了存储在存储器550中的内存监控装置555,其可以是程序和插件等形式的软件,包括以下软件模块:第一上传模块5551、接收模块5552、配置模块5553、监控模块5554和第二上传模块5555,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。
将在下文中说明各个模块的功能。
在另一些实施例中,本申请实施例提供的装置可以采用硬件方式实现,作为示例,本申请实施例提供的装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的内存监控方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,APPlication Specific Integrated Circuit)、DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,ComplexProgrammable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable GateArray)或其他电子元件。
将结合本申请实施例提供的终端的示例性应用和实施,在本申请实施例中,将以终端为执行主体说明本申请实施例提供的内存监控方法。
参见图3,图3是本申请实施例提供的内存监控方法的一个可选的流程示意图,将结合图3示出的步骤进行说明。
在步骤301中,响应于目标应用的启动事件,终端上传与目标应用相关的初始化信息至服务器。
在本申请的一些实施例中,该目标应用为终端中需要进行评测,即需要对其进行内存监控的目标应用。响应于该目标应用的启动事件,终端可以获取与该目标应用相关的初始化信息,并将该初始化信息上传至服务器。其中该初始化信息用于指示该服务器生成与该目标应用适配的配置指令。
其中,该初始化信息可以包括用于表征该目标应用状态的应用信息,也可以包括用于表征该终端状态的终端信息。其中,该应用信息可以包括该目标应用的应用类型,应用大小,应用安装时间,缓存量,应用标识,应用版本和登录该目标应用的应用用户标识;该终端信息可以包括登录该终端设备的终端用户标识,设备型号,组件版本,推送DeviceToken。其中,DeviceToken指是厂商通道APNs的下发的设备标识。
在步骤302中,服务器基于初始化信息生成配置指令。
在本申请的一些实施例中,服务器可以根据该初始化信息中的用户身份信息实现对该目标应用的抽样监控。该用户身份信息可以为登录该目标应用的应用用户标识,也可以为登录该终端设备的终端用户标识。服务器可以按照预设规则根据该用户身份标识确定需要进行监控的部分终端(目标应用)。例如,可以按照身份标识最后一位对所有用户进行分类,按照比例对其中至少一类的用户对应的终端(目标应用)进行内存监控。可以在该配置指令中添加内存监控开启参数,实现比例抽样监控。
在本申请的一些实施例中,服务器可以根据该初始化信息中的应用信息和终端信息,为不同终端状态和/或不同应用状态对应的终端生成不同的配置指令。例如,对于终端硬件性能较优的终端,可以生成监控精度较高的配置指令;对于硬件性能较差的终端,可以生成监控精度较低的配置指令。对于不同版本的目标应用,由于包含的应用功能不同,对应生成不同版本的配置指令。
在步骤303中,终端接收服务器发送的配置指令。
在步骤304中,终端根据配置指令对目标应用的监控组件进行配置。
在本申请的一些实施例中,该监控组件用于监控该目标应用的内存使用情况。通过该配置指令,可以将该监控组件配置为与该目标应用适配的监控组件。由于该配置指令为根据与目标应用相关的初始化信息生成的,因此,经过配置的监控组件与目标应用的适配度较高。
在步骤305中,终端通过配置后的监控组件监控目标应用,得到内存分配数据。
在本申请的一些实施例中,该内存分配对象为需要分配内存地址且需要被监控的对象。其中,该内存分配对象可以为objective-c类对象、malloc分配的内存区域、block代码块和C++对象中的至少一项。上述仅为举例,并不作限制。
在本申请的一些实施例中,终端可以获取系统中用于分配/释放内存的至少一个系统函数,并HOOK(钩子函数)得到的至少一个系统函数,由此,可以在为该内存分配对象分配内存的过程中,获取每一内存分配对象对应的分配信息。
在步骤306中,终端将内存分配数据上传至服务器。
在本申请的一些实施例中,终端可以在发生了应用内存错误的情况下,将该内存分配数据上传至服务器。例如,在监控组件检测到终端由于内存耗尽、内存爆炸等问题而导致重启之后,终端可以将监控组件获取到的内存分配数据上报至后台服务器,这样后台服务器可以通过堆栈信息还原出对应的代码信息。
在步骤307中,服务器根据内存分配数据对目标应用的内存使用情况进行评测。
在本申请的一些实施例中,服务器可以对上传的内存分配数据进行分析,进而可以得到各个堆栈对应的内存使用情况,进而找到该系统的内存耗尽原因。并生成对应的问题报告。
在本申请的一些实施例中,服务器还可以基于预设的符号表,将内存分配数据中出现问题的地址翻译成代码,即翻译成出现问题的文件名、函数名和行号等信息。进而可以进一步定位问题位置。
通过本申请实施例对于图3的上述示例性实施可知,本申请实施例通过由服务器根据与目标应用相关的初始化信息生成的配置指令对监控组件进行配置,使得经过该配置指令配置的监控程序更加适合当前终端中的目标应用,提升了内存监控的准确性。并且,由于本申请监控组件只获取内存分配数据,并不对该内存分配数据进行分析,通过将内存分配数据的分析,及对该目标应用的内存使用情况进行评测的过程放在服务器中执行,降低了控制组件在监控应用程序中所需的计算资源,可以避免监控组件对目标应用进行监控时造成的性能影响,提升了目标应用对应的服务功能的响应效率。
参见图4,图4是本申请实施例提供的内存监控方法的一个可选的流程示意图,基于图3,图3中的步骤304可以更新为步骤401至步骤402,将结合图4示出的步骤进行说明。
在步骤401中,终端根据配置指令和存储于本地磁盘中的至少一个历史云指令生成至少一个云指令。
在本申请的一些实施例中,终端的本地磁盘中的至少一个历史云指令可以为该监控组件对应的默认云指令,也可以是该监控组件上一次启动时对该监控组件进行配置的至少一个云指令。该配置指令用于对该至少一个历史云指令进行更新。
在本申请的一些实施例中,在终端启动该目标应用时,终端会同时激活该目标应用对应的监控组件,在对该监控组件进行初始化的过程中,会将该本地磁盘中的至少一个历史云指令加载至内存中,得到历史云指令列表。其中,该配置指令用于对该历史云指令列表中的部分历史云指令进行更新。
在本申请的一些实施例中,可以通过以下方法实现上述步骤401:解析配置指令,得到至少一条待更新云指令;遍历存储于本地磁盘中的至少一个历史云指令,并加载至内存,得到历史云指令列表;根据至少一条待更新云指令对历史云指令列表进行更新,得到云指令列表;云指令列表包括至少一个云指令。
其中,该配置指令可以包括至少一个待更新云指令对应的指令数据,配置服务器在下发该至少一个待更新云指令对应的指令数据时,为了提升数据传输效率,降低传输数据量,可以采用预设的封装方法对至少一个待更新云指令对应的指令数据进行封装,得到该配置指令。终端在接收到该配置指令后,可以采用与该封装方法对应的解析方法对该配置指令进行解析,得到至少一个待更新云指令。
在本申请的一些实施例中,每一待更新云指令携带对应的指令类型,终端根据每一待更新云指令的指令类型,采用不同的处理策略处理对应的待更新云指令。
其中,在待更新云指令为更新类型的情况下,在历史云指令列表中查找待更新云指令对应的目标云指令,根据待更新云指令对目标云指令进行更新。在本实施例中,可以根据该待更新云指令的指令标识,在该历史云指令列表中的至少一个历史云指令中查找对应的目标云指令。其中,该指令标识包括但不限于是指令ID,指令类型和指令格式。在查找到该待更新云指令对应的目标云指令的情况下,可以将该目标云指令从该历史云指令列表中移除,并将该待更新云指令添加至该历史云指令列表中;还可以利用该待更新云指令中的待更新参数对该历史云指令列表中的目标云指令进行修改,进而完成对目标云指令的更新。在未查找该待更新云指令对应的目标云指令的情况下,可以直接将该待更新云指令添加至该历史云指令列表中。
其中,在待更新云指令为移除类型的情况下,在历史云指令列表中查找待更新云指令对应的目标云指令,将目标云指令从历史云指令列表中移除。在本实施例中,可以根据该待更新云指令的指令标识,在该历史云指令列表中的至少一个历史云指令中查找对应的目标云指令。在查找到该待更新云指令对应的目标云指令的情况下,可以将该目标云指令从该历史云指令列表中移除。在未查找该待更新云指令对应的目标云指令的情况下,忽略该待更新云指令。
在本申请的一些实施例中,在得到该至少一个云指令后,将该至少一个云指令存储于终端的本地磁盘中,并覆盖该至少一个历史云指令。在下一次对该监控组件进行配置的过程中,可以直接从本地磁盘中读取本次配置过程中经过更新的至少一个云指令。
在本申请的一些实施例中,在上述根据至少一条待更新云指令对历史云指令列表进行更新的过程中,还可以包括保存更新记录,将更新记录上传至服务器。
其中,在该待更新云指令为移除类型的情况下,若根据该待更新云指令完成对应的历史云指令的移除过程,则将移除成功保存至该待更新云指令对应的更新记录中;在该待更新云指令为更新类型的情况下,若根据该待更新云指令完成对应的历史云指令的更新过程,则将更新成功保存至该待更新云指令对应的更新记录中。在将该更新记录上传至服务器之后,服务器可以根据该更新记录确定该终端对应的更新情况,在下一次下发配置指令的过程中,可以同时根据该目标应用相关的初始化信息和该更新记录生成对应的配置指令。
例如,对于相同的终端A和终端B,在对监控组件进行第一次配置的过程中,终端A对于待更新云指令的更新记录为更新成功,终端B对于该待更新云指令的更新记录为更新失败,在对终端A和终端B的监控组件进行第二次配置的过程中,若服务器对于终端A的配置指令为空指令,则服务器对终端B的配置指令会携带上述更新失败的待更新云指令。
在步骤402中,终端根据至少一个云指令对监控组件进行配置。
在本申请的一些实施例中,终端可以根据得到的至少一个云指令,确定每一云指令对应的配置参数,进而得到包括每一云指令对应的配置参数的监控配置参数。利用监控配置参数对该监控组件进行配置,其中,该监控组件对目标应用进行内存监控的过程中,需要通过该监控组件对应的监控子程序/指令完成监控任务,对于其中的部分监控子程序/指令,需要设置对应的执行参数,在得到上述监控配置参数后,可以利用每一配置参数去更新对应的监控子程序/指令中的执行参数,进而实现对该监控组件的配置。
例如,在该监控配置参数包括监控时间的情况下,监控时间包括监控开始时间和监控终止时间,终端可以根据该监控开始时间对该监控组件中用于触发监控进程的触发子程序,根据该监控终止时间对用于终止监控进程的终止子程序进行配置,更新该触发子程序和终止子程序中的时间参数,在更新完成后,更新后的触发子程序可以按照最新的监控开始时间创建监控进程,终止子程序也可以按照最新的监控终止时间终止该监控进程。
在本申请的一些实施例中,该监控配置参数包括以下至少之一:适配版本参数、监控时间、监控开启参数和周期开启参数。
需要说明的是,在该监控组件第一次运行时,监控组件内设置有默认的初始监控配置参数,利用该初始监控配置参数,可以对该监控组件进行初始化,并执行与该初始监控配置参数对应的标准监控过程。
通过本申请实施例对于图4的上述示例性实施可知,本申请实施例通过服务器下发的配置指令对终端的监控组件进行配置,可以实现对终端目标应用的动态监测,扩大了本申请监测方法的应用范围,由于配置指令是服务器根据与目标应用相关的初始化信息生成的,因此,可以使得经过该配置指令配置的监控程序更加适合当前终端中的目标应用,提升了内存监控的准确性。并且,由于通过配置指令更新本地存储的历史云指令的方式,可以减少配置指令的数据量,提升对监控组件配置过程中的网络利用率。同时,通过将更新后的至少一个云指令存储于本地磁盘中,在下一次配置时可以从本地磁盘中获取较新的云指令,进一步的减少下一次配置过程中配置指令的数据量。
参见图5,图5是本申请实施例提供的内存监控方法的一个可选的流程示意图,基于图3,图3中的步骤305可以更新为步骤501至步骤502,将结合图5示出的步骤进行说明。
在步骤501中,终端在对目标应用分配内存的过程中,获取每一内存分配对象对应的分配信息;分配信息包括该内存分配对象的大小信息和堆栈信息。
在本申请的一些实施例中,该内存分配对象为需要分配内存地址且需要被监控的对象。终端可以获取系统中用于分配/释放内存的至少一个系统函数,并HOOK得到的至少一个系统函数,由此,可以在为该内存分配对象分配内存的过程中,获取每一内存分配对象对应的分配信息。
其中,以IOS系统为例,该IOS系统通过malloc函数进行内存的动态分配,并通过free函数释放内存。终端可以通过HOOK该malloc函数和free函数,以得到每一内存分配对象对应的分配信息。例如,在利用malloc函数对一个内存分配对象分配内存时,可以通过检测该malloc函数返回的指针参数,在该指针参数为空时,表示分配失败;在分配成功时,该malloc函数会返回指向分配内存的指针,进而可以得到对应的分配信息。
在本申请的一些实施例中,该内存分配信息可以包括该内存分配对象的大小信息和堆栈信息。其中,堆栈信息包括该内存分配对象对应的基地址和偏移地址。
例如,该内存分配信息可以为下表1的格式。
表1
在步骤502中,终端根据每一内存分配对象的大小信息和堆栈信息,生成内存分配数据。
通过本申请实施例对于图5的上述示例性实施可知,本申请实施例通过钩子函数监控系统中用于分配内存的系统函数,获取目标应用对应的每一内存分配对象的大小信息和堆栈信息。如此,可以实现对该目标应用进行内存使用情况的监控,提升了监控对象的范围。
参见图6,图6是本申请实施例提供的内存监控方法的一个可选的流程示意图,基于图5,图5中的步骤502可以更新为步骤601至步骤602,将结合图6示出的步骤进行说明。
在步骤601中,在内存分配对象的大小信息超过预设的触顶阈值的情况下,终端将内存分配对象的大小信息和堆栈信息记录至内存中的哈希表。
在本申请的一些实施例中,在获取内存分配对象的大小信息和堆栈信息后,可以判断该内存分配对象的大小信息是否超过预设的触顶阈值,在超过预设的触顶阈值的情况下,终端将内存分配对象的大小信息和堆栈信息记录至内存中的哈希表;在未超过预设的触顶阈值的情况下,该内存分配对象造成内存爆炸的可能性较低,因此不保存该内存分配对象的大小信息和堆栈信息。
在本申请的一些实施例中,该触顶阈值可以通过该配置指令进行配置。
在步骤602中,终端将哈希表转存至本地磁盘中,以得到内存分配数据。
在本申请的一些实施例中,可以通过步骤6021实现上述步骤602。
在步骤6021中,响应于触发指令,将哈希表转存至本地磁盘中,以得到内存分配数据;触发指令包括以下至少之一:通过定时触发装置所产生的定时触发指令;内存负载高于预设阈值时产生的负载触发指令;目标应用中进程崩溃时产生的崩溃触发指令;目标应用停止运行时产生的停止触发指令。
在本申请的一些实施例中,可以通过mmap技术将HASH表DUMP到本地磁盘中,得到该内存分配数据。
通过本申请实施例对于图6的上述示例性实施可知,本申请实施例通过设置触顶阈值,在内存分配对象对应的大小信息超过该触顶阈值的情况下,才记录该内存分配对象对应的分配信息。如此,可以降低内存分配数据对本地磁盘中的存储空间,并且,在将该内存分配数据上报至服务器并进行分析的过程中,还可以减低上报的数据传输量,也提升了服务器对该内存分配数据的分析效率。
参见图7,图7是本申请实施例提供的内存监控方法的一个可选的流程示意图,基于图5,图5中的步骤306可以更新为步骤701至步骤702,将结合图7示出的步骤进行说明。
在步骤701中,终端根据内存分配数据生成至少一条日志记录,将至少一条日志记录写入数据库中。
在本申请的一些实施例中,终端可以根据该内存分配数据中每一内存分配对象对应的分配信息生成对应的日志记录,并将该日志记录写入终端中设置的数据库中。
在本申请的一些实施例中,该内存分配数据是存储于本地磁盘中的,在执行上述步骤701的过程中,需要将该内存分配数据加载至内存中。在将该内存分配数据中每一内存分配对象对应的分配信息以日志记录的形式保存至该数据库之后,可以对该内存分配数据添加已处理标记。终端会根据本地磁盘中其他内存分配数据对应的时间顺序,将其他未处理的内存分配数据写入数据库中。
在本申请的一些实施例中,可以在终端启动该目标应用或启动该监控组件的同时,将本地磁盘中的内存分配数据加载至内存中,并执行该步骤701;还可以在步骤305得到该内存分配数据的同时,将本地磁盘中的内存分配数据加载至内存中,并执行该步骤701。本申请对此不作限定。
在本申请的一些实施例中,对于此次产生的内存分配数据,可以通过以下方式实现上述步骤701:响应于目标应用的下一次启动事件,将内存分配数据加载至内存中;将内存中的内存分配数据转换为日志数据模型;日志数据模型包括至少一条日志记录。其中,在将内存分配数据转换为日志数据模型的过程中,可以添加以下至少之一字段对应的字段信息:会话ID,唯一标识,应用版本,系统版本,机型,电量,CPU,场景,内存使用大小,内存触顶阈值,分类,分类大小/对象数量,堆栈等。
在步骤702中,响应于上传指令,终端通过数据库上传将至少一条日志记录至服务器。
在本申请的一些实施例中,上传指令包括以下至少之一:目标应用启动时产生的上传指令;网络变化时产生的上传指令;目标应用进入后台时产生的上传指令。
在本申请的一些实施例中,终端可以检测当前网络环境,在当前网络环境发生变化时,产生该上传指令。其中,可以当前网络环境由网络质量低转换至网络质量高的情况下,产生该上传指令;也可以在当前网络环境由移动网络转换至局域网的情况下,产生该上传指令。由此,可以提升该日志记录的上传效率。
在本申请的一些实施例中,可以在目标应用进入后台时产生该上传指令,在该目标应用处于前台运行时,为了提升该目标应用中其他服务功能的响应速率,不进行日志记录的上传,只有在目标应用进入后台时,进行日志记录的上传。
在本申请的一些实施例中,可以通过以下方式实现上述通过数据库上传将至少一条日志记录至服务器:依次提取数据库中的待上传日志记录并上传至服务器,在待上传日志记录上传成功的情况下,将待上传日志从数据库中移除,直至数据库为空。
在本实施例中,终端可以同时从数据库中提取至少一条日志记录作为待上传日志,将该待上传日志上传至服务器,接收该待上传日志对应的上传反馈,在该上传反馈为上传成功的情况下,将该待上传日志从数据库中移除。在未接收到该待上传日志对应的上传反馈或该上传反馈为上传失败的情况下,重新上传该待上传日志至服务器。在数据库中不存在任意一个日志记录的情况下,停止上传。
通过本申请实施例对于图7的上述示例性实施可知,本申请实施例通过将得到的内存分配数据以日志记录的形式存储于数据库中,通过数据库在合适的时机完成日志记录的上传,通过服务器完成对日志记录的分析过程。由于响应于上述上传指令进行数据库中日志记录的上传,可以避免监控组件对目标应用进行监控时造成的性能影响,提升了目标应用对应的服务功能的响应效率。并且,由于采用确认上报成功后移除本地数据库中日志记录的方案,可以减低监控组件的本地缓存,提升设备存储资源的资源利用率。并且由于将表征目标应用内存使用情况的日志记录上传至服务器,由服务器完成日志记录的分析和问题定位,进一步降低了终端的资源使用量。
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。
针对内存监控的相关技术,都是基于ObjC的runtime(运行时刻),使用MethodSwizzling(方法的调和)替换原有的alloc(申请内存)方法,在应用(APP)运行时记录所有ObjC实例的分配信息。但是存在的情况包括但不限于:(1)监控不全面,部分只能监控ObjC对象,不能监控C++对象,malloc内存块以及vm内存等。(2)没有记录内存对象的堆栈信息,无法定位到出现内存爆炸(OOM)的位置。
因此,发明人经过研究,提出了一种可以实现监控动态化自动化的内存监控方法,该内存监控方法可以根据目标应用的需求进行适配。
请参阅图8,图8是本申请实施例提供的内存分配监控方法的一个可选的监控示意图。从图8可以看出,要实现内存爆炸的监控,需要HOOK系统的(堆内存/VM内存)内存分配81(malloc)以及HOOK系统的(堆内存/VM内存)内存释放82(free)方法,跟踪并记录每个内存块的分配信息(通过malloc_logger/syscall_logger)得到内存分配数据83,同时将该内存分配数据83DUMP(转存)本地磁盘,得到DUMP数据84,在合适的时机进行上报。其中,malloc是在C语言中用于在程序运行时在堆中进行动态内存分配的库函数。free是进行内存释放的库函数。
请参阅图9,图9是本申请实施例提供的内存分配监控系统的一个可选的系统架构示意图。其中,该内存分配监控系统包括配置服务器91、终端92和监控服务器93。终端92中设置需要监控的目标应用,和对该目标应用的监控组件。配置服务器91可以根据终端中目标应用的初始化信息生成对应的配置信息,并将配置信息推送至终端92。终端92在接收到该配置信息后,可以对本地的监控组件进行配置,并通过该监控组件对目标应用的内存使用情况进行监控,得到内存分配信息。终端92将该内存分配信息上传至监控服务器93,该监控服务器93可以对该内存分配信息进行数据清洗、堆栈还原等分析过程,得到对该目标应用的性能测评结果。
请参阅图10,图10是本申请实施例提供的内存分配监控方法的一个可选的流程示意图。
在步骤1001中,终端APP启动。
在步骤1002中,用户身份信息以及配置信息上报。
其中,终端中的监控组件(也称为内存性能测评组件)进行用户身份信息以及配置信息上报。用户身份信息包括但不限于:标识该用户身份的唯一ID,配置信息包括:设备型号,组件版本,推送DeviceToken等。
在步骤1003中,内存性能测评组件激活。
其中,在激活过程中,初始化必要的数据。包括但不限于:(1)遍历本地磁盘中固化的全部历史云指令,加载到内存中,形成历史云指令列表;(2)遍历本地磁盘中固化的历史内存分配信息文件,转成日志数据模型加载到内存中。
在步骤1004中,配置服务器下发配置指令。
其中,该配置指令通过配置服务器提供的配置Web平台完成配置以及发布。该配置指令携带以下至少之一的配置信息:开启监控的系统版本,应用版本,生效时间,失效时间,开启监控,抽样比例,监控阈值等。
在步骤1005中,接收配置指令。
在步骤1006中,读取拉取的配置指令,根据约定的协议进行解析,得到至少一条云指令。
在步骤1007中,判断云指令类型。在该云指令类型为更新类型的情况下,执行步骤1008,在该云指令类型为移除类型的情况下,执行步骤1012。
其中,组件内判断云指令的类型。云指令类型包括更新类型和移除类型。在为更新类型时,查找内存中的历史云指令列表中是否包含对应的历史云指令,如果已经包含对应的历史云指令,则根据版本号等信息决定是否覆盖;不包含时直接新增。在为移除类型时,查询内存中是否存在对应的历史云指令,存在则直接删除该对应的历史云指令。
在步骤1008中,确定拉取的云指令。
在步骤1009中,遍历历史云指令列表。
在步骤1010中,使用拉取的云指令覆盖本地。
在步骤1011中,上报云指令已经拉取成功并覆盖本地,告知配置服务器忽略该云指令的后续拉取操作。
其中,判断属于更新类型的云指令时,仅在拉到最新的云指令的版本大于内存中的云指令版本时,才会覆盖内存中的云指令。同时将覆盖后的内存的云指令列表覆盖到本地磁盘,以便下一次APP启动时读取到最新的云指令数据。云指令更新后,上报云指令平台(配置服务器)告知本地已经成功更新,后续该版本的云指令拉取操作需要忽略,避免频繁拉取和更新同样的云指令。这是一种终端和服务器交互确认机制,使服务器已经拉到最新版本的云指令了,后面就算终端再次请求该版本的云指令,也不下发了,避免同样的内容多次下发。
在步骤1012中,遍历历史云指令列表并移除对应历史云指令。
在步骤1013中,上报云指令已经移除成功。
其中,判断属于移除类型的云指令时,将内存中的对应的云指令移除后,同时将移除后的内存中的列表覆盖到本地磁盘,以便下一次APP启动时读取到最新的数据。云指令移除后,上报云指令平台(配置服务器)告知本地已经成功移除。
在步骤1014中,云指令拉取结束,对该内存性能测评组件进行配置。
其中,启动设置项可以包括以下至少之一:
(1)系统版本是否适配。包括最低版本和最高版本,比如10.0|*。*代表通配。
(2)生效时间和结束时间。
(3)是否开启内存监控。0/1,1代表开启,0代表不开启。
(4)是否开启周期测评。0/1,1代表开启,0代表不开启。
(5)测评时监控内存触顶阈值,单次大内存分配阈值,是否上传堆栈,是否开启周期监控,抽样比例等。
在步骤1015中,内存测评监控是否开启。在开启的情况下,执行步骤1017或步骤1022;在不开启的情况下,执行步骤1016。
在步骤1016中,内存测评结束。
在步骤1017中,HOOK系统的内存分配和释放的API。
其中,在内存中初始化记录内存分配信息的HASH表。HOOK内存分配信息回调指针malloc_logger,在内存分配时根据该指针获取分配大小和堆栈;设置云指令配置项中的触顶阈值,超过该阈值时,记录内存分配信息和进行堆栈回溯。其中,堆栈回溯指记录该对象的内存分配地址的堆栈(即列表,根据先进后出的顺序记录)。触顶阈值的设置内存分配字节大小,比如30K,监控到某一对象分配的大小超过30K,组件才会记录该内存块的分配次数以及大小。将内存分配信息和堆栈记录到HASH表。
在步骤1018中,记录内存分配信息。
在步骤1019中,将内存中日志数据模型写入本地数据库,同时对数据库中存在的日志记录开始轮询,存在记录则上报。
在步骤1020中,日志上报。
其中,本地数据库中存在记录(存在记录则表示未上报),轮询上报。上报成功后,移除本地数据库中对应的记录。在终端APP启动后,网络变化时,APP进入后台时,后台任务拉起APP时触发轮询机制。
在步骤1021中,监控服务器分析上报的日志,得到内存性能测评数据和问题清单。
其中,数据上报后,可通过web平台调用报表服务读取报表数据库中的数据,包括内存性能测评数据以及问题清单,以预定义的展示维度进行展示和提供下载。
在步骤1022中,周期测评是否开启。在开启的情况下,执行步骤1023。
在步骤1023中,将内存中HASH表记录的内存分配信息转存至DUMP文件中。
在步骤1024中,得到本地存储的DUMP文件。
在步骤1025中,终端APP启动后,读取本地固化的DUMP文件到内存,并转成固定的日志数据模型。
其中,该模型中的统计字段包括但不限于:会话ID,唯一标识,应用版本,系统版本,机型,电量,CPU,场景,内存使用大小,内存触顶阈值,分类,分类大小/对象数量,堆栈等。
通过本申请实施例对于图10的上述示例性实施可知,本申请可以实现对目标应用的动态化自动化测评,无需人工干预。便于测评APP的性能情况,并且定位到问题的位置,方便产品进一步优化和提升产品的竞争力,有利于产品的综合发展。
下面继续说明本申请实施例提供的内存监控装置555的实施为软件模块的示例性结构,在本申请的一些实施例中,如图2所示,存储在存储器550的内存监控装置555中的软件模块可以包括:
第一上传模块5551,用于响应于目标应用的启动事件,上传与目标应用相关的初始化信息至服务器;
接收模块5552,用于接收服务器发送的配置指令;配置指令是基于初始化信息生成的;
配置模块5553,用于根据配置指令对目标应用的监控组件进行配置;
监控模块5554,用于通过配置后的监控组件监控目标应用,得到内存分配数据;
第二上传模块5555,用于将内存分配数据上传至服务器,以使服务器根据内存分配数据对目标应用的内存使用情况进行评测。
在本申请的一些实施例中,所述配置模块5553,还用于根据配置指令和存储于本地磁盘中的至少一个历史云指令,生成至少一个云指令;根据至少一个云指令对监控组件进行配置。
在本申请的一些实施例中,所述配置模块5553,还用于解析配置指令,得到至少一条待更新云指令;遍历存储于本地磁盘中的至少一个历史云指令,并加载至内存,得到历史云指令列表;根据至少一条待更新云指令对历史云指令列表进行更新,得到云指令列表;云指令列表包括至少一个云指令。
在本申请的一些实施例中,所述配置模块5553,还用于在待更新云指令为更新类型的情况下,在历史云指令列表中查找待更新云指令对应的目标云指令,根据待更新云指令对目标云指令进行更新;在待更新云指令为移除类型的情况下,在历史云指令列表中查找待更新云指令对应的目标云指令,将目标云指令从历史云指令列表中移除。
在本申请的一些实施例中,所述配置模块5553,还用于将至少一个云指令存储于本地磁盘中,并覆盖至少一个历史云指令。
在本申请的一些实施例中,所述配置模块5553,还用于在根据至少一条待更新云指令对历史云指令列表进行更新的过程中,保存更新记录;响应于得到云指令列表,将更新记录上传至服务器。
在本申请的一些实施例中,所述配置模块5553,还用于解析至少一个云指令,得到监控配置参数;监控配置参数包括以下至少之一:适配版本参数、监控时间、监控开启参数和周期开启参数;利用监控配置参数对监控组件进行配置。
在本申请的一些实施例中,所述监控模块5554,还用于在对目标应用分配内存的过程中,获取每一内存分配对象对应的分配信息;分配信息包括该内存分配对象的大小信息和堆栈信息;根据每一内存分配对象的大小信息和堆栈信息,生成内存分配数据。
在本申请的一些实施例中,所述监控模块5554,还用于在内存分配对象的大小信息超过预设的触顶阈值的情况下,将内存分配对象的大小信息和堆栈信息记录至内存中的哈希表;将哈希表转存至本地磁盘中,以得到内存分配数据。
在本申请的一些实施例中,所述监控模块5554,还用于响应于触发指令,将哈希表转存至本地磁盘中,以得到内存分配数据;触发指令包括以下至少之一:通过定时触发装置所产生的定时触发指令;内存负载高于预设阈值时产生的负载触发指令;目标应用中进程崩溃时产生的崩溃触发指令;目标应用停止运行时产生的停止触发指令。
在本申请的一些实施例中,所述第二上传模块5555,还用于根据内存分配数据生成至少一条日志记录,并将至少一条日志记录写入数据库中;响应于上传指令,通过数据库上传将至少一条日志记录至服务器;上传指令包括以下至少之一:目标应用启动时产生的上传指令;网络变化时产生的上传指令;目标应用进入后台时产生的上传指令。
在本申请的一些实施例中,所述第二上传模块5555,还用于响应于目标应用的下一次启动事件,将内存分配数据加载至内存中;将内存中的内存分配数据转换为日志数据模型;日志数据模型包括至少一条日志记录。
在本申请的一些实施例中,所述第二上传模块5555,还用于依次提取数据库中的待上传日志记录并上传至服务器,在待上传日志记录上传成功的情况下,将待上传日志从数据库中移除,直至数据库为空。
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例上述的内存监控方法。
本申请实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的内存监控方法,例如,如图3至图7、图10示出的方法。
在本申请的一些实施例中,计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在本申请的一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
综上所述,通过本申请实施例能够实现以下技术效果:
(1)通过本申请实施例对于图3的上述示例性实施可知,本申请实施例通过由服务器根据与目标应用相关的初始化信息生成的配置指令对监控组件进行配置,使得经过该配置指令配置的监控程序更加适合当前终端中的目标应用,提升了内存监控的准确性。并且,由于本申请监控组件只获取内存分配数据,并不对该内存分配数据进行分析,通过将内存分配数据的分析,及对该目标应用的内存使用情况进行评测的过程放在服务器中执行,降低了控制组件在监控应用程序中所需的计算资源,可以避免监控组件对目标应用进行监控时造成的性能影响,提升了目标应用对应的服务功能的响应效率。
(2)本申请实施例通过服务器下发的配置指令对终端的监控组件进行配置,可以实现对终端目标应用的动态监测,扩大了本申请监测方法的应用范围,由于配置指令是服务器根据与目标应用相关的初始化信息生成的,因此,可以使得经过该配置指令配置的监控程序更加适合当前终端中的目标应用,提升了内存监控的准确性。并且,由于通过配置指令更新本地存储的历史云指令的方式,可以减少配置指令的数据量,提升对监控组件配置过程中的网络利用率。同时,通过将更新后的至少一个云指令存储于本地磁盘中,在下一次配置时可以从本地磁盘中获取较新的云指令,进一步的减少下一次配置过程中配置指令的数据量。
(3)本申请实施例通过钩子函数监控系统中用于分配内存的系统函数,获取目标应用对应的每一内存分配对象的大小信息和堆栈信息。如此,可以实现对该目标应用进行内存使用情况的监控,提升了监控对象的范围。
(4)本申请实施例通过设置触顶阈值,在内存分配对象对应的大小信息超过该触顶阈值的情况下,才记录该内存分配对象对应的分配信息。如此,可以降低内存分配数据对本地磁盘中的存储空间,并且,在将该内存分配数据上报至服务器并进行分析的过程中,还可以减低上报的数据传输量,也提升了服务器对该内存分配数据的分析效率。
(5)本申请实施例通过将得到的内存分配数据以日志记录的形式存储于数据库中,通过数据库在合适的时机完成日志记录的上传,通过服务器完成对日志记录的分析过程。由于响应于上述上传指令进行数据库中日志记录的上传,可以避免监控组件对目标应用进行监控时造成的性能影响,提升了目标应用对应的服务功能的响应效率。并且,由于采用确认上报成功后移除本地数据库中日志记录的方案,可以减低监控组件的本地缓存,提升设备存储资源的资源利用率。并且由于将表征目标应用内存使用情况的日志记录上传至服务器,由服务器完成日志记录的分析和问题定位,进一步降低了终端的资源使用量。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。
Claims (10)
1.一种内存监控方法,其特征在于,包括:
响应于目标应用的启动事件,上传与所述目标应用相关的初始化信息至服务器;
接收所述服务器发送的配置指令;所述配置指令是基于所述初始化信息生成的;
根据所述配置指令对所述目标应用的监控组件进行配置;
通过配置后的监控组件监控所述目标应用,得到内存分配数据;
将所述内存分配数据上传至所述服务器,以使所述服务器根据所述内存分配数据对所述目标应用的内存使用情况进行评测。
2.根据权利要求1所述的方法,其特征在于,所述根据所述配置指令对所述目标应用的监控组件进行配置,包括:
根据所述配置指令和存储于本地磁盘中的至少一个历史云指令,生成至少一个云指令;
根据所述至少一个云指令对所述监控组件进行配置。
3.根据权利要求2所述的方法,其特征在于,所述根据所述配置指令和存储于本地磁盘中的至少一个历史云指令,生成至少一个云指令,包括:
解析所述配置指令,得到至少一条待更新云指令;
遍历存储于本地磁盘中的至少一个历史云指令,并加载至内存,得到历史云指令列表;
根据所述至少一条待更新云指令对所述历史云指令列表进行更新,得到云指令列表;所述云指令列表包括所述至少一个云指令。
4.根据权利要求1所述的方法,其特征在于,所述通过配置后的监控组件监控所述目标应用,得到内存分配数据,包括:
在对所述目标应用分配内存的过程中,获取每一内存分配对象对应的分配信息;所述分配信息包括所述内存分配对象的大小信息和堆栈信息;
根据每一所述内存分配对象的大小信息和堆栈信息,生成所述内存分配数据。
5.根据权利要求4所述的方法,其特征在于,所述根据每一所述内存分配对象的大小信息和堆栈信息,生成所述内存分配数据,包括:
在所述内存分配对象的大小信息超过预设的触顶阈值的情况下,将所述内存分配对象的大小信息和堆栈信息记录至所述内存中的哈希表;
将所述哈希表转存至本地磁盘中,以得到所述内存分配数据。
6.根据权利要求5所述的方法,其特征在于,所述将所述哈希表转存至本地磁盘中,以得到所述内存分配数据,包括:
响应于触发指令,将所述哈希表转存至所述本地磁盘中,以得到所述内存分配数据;所述触发指令包括以下至少之一:通过定时触发装置所产生的定时触发指令;所述内存负载高于预设阈值时产生的负载触发指令;所述目标应用中进程崩溃时产生的崩溃触发指令;所述目标应用停止运行时产生的停止触发指令。
7.根据权利要求4所述的方法,其特征在于,所述将所述内存分配数据上传至所述服务器,包括:
根据所述内存分配数据生成至少一条日志记录,并将所述至少一条日志记录写入数据库中;
响应于上传指令,通过所述数据库上传所述将所述至少一条日志记录至所述服务器;所述上传指令包括以下至少之一:所述目标应用启动时产生的上传指令;网络变化时产生的上传指令;所述目标应用进入后台时产生的上传指令。
8.一种内存监控装置,其特征在于,包括:
第一上传模块,用于响应于目标应用的启动事件,上传与所述目标应用相关的初始化信息至服务器;
接收模块,用于接收所述服务器发送的配置指令;所述配置指令是基于所述初始化信息生成的;
配置模块,用于根据所述配置指令对所述目标应用的监控组件进行配置;
监控模块,用于通过配置后的监控组件监控所述目标应用,得到内存分配数据;
第二上传模块,用于将所述内存分配数据上传至所述服务器,以使所述服务器根据所述内存分配数据对所述目标应用的内存使用情况进行评测。
9.一种内存监控设备,其特征在于,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,存储有可执行指令,用于被处理器执行时,实现权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011218025.0A CN112214388A (zh) | 2020-11-04 | 2020-11-04 | 内存监控方法、装置、设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011218025.0A CN112214388A (zh) | 2020-11-04 | 2020-11-04 | 内存监控方法、装置、设备及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112214388A true CN112214388A (zh) | 2021-01-12 |
Family
ID=74058222
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011218025.0A Pending CN112214388A (zh) | 2020-11-04 | 2020-11-04 | 内存监控方法、装置、设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112214388A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112860444A (zh) * | 2021-04-26 | 2021-05-28 | 腾讯科技(深圳)有限公司 | 内存调用信息的确定方法和装置、存储介质及电子设备 |
CN115687159A (zh) * | 2022-12-29 | 2023-02-03 | 飞腾信息技术有限公司 | 调试方法、装置及计算机可读存储介质 |
CN116139498A (zh) * | 2023-04-18 | 2023-05-23 | 深圳市益玩网络科技有限公司 | 基于内存管理的对象创建方法、装置、设备及存储介质 |
CN116820766A (zh) * | 2023-06-29 | 2023-09-29 | 黑龙江起速网络科技有限公司 | 基于大数据技术的计算机资源分配系统及方法 |
-
2020
- 2020-11-04 CN CN202011218025.0A patent/CN112214388A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112860444A (zh) * | 2021-04-26 | 2021-05-28 | 腾讯科技(深圳)有限公司 | 内存调用信息的确定方法和装置、存储介质及电子设备 |
CN112860444B (zh) * | 2021-04-26 | 2021-08-20 | 腾讯科技(深圳)有限公司 | 内存调用信息的确定方法和装置、存储介质及电子设备 |
CN115687159A (zh) * | 2022-12-29 | 2023-02-03 | 飞腾信息技术有限公司 | 调试方法、装置及计算机可读存储介质 |
CN115687159B (zh) * | 2022-12-29 | 2023-03-21 | 飞腾信息技术有限公司 | 调试方法、装置及计算机可读存储介质 |
CN116139498A (zh) * | 2023-04-18 | 2023-05-23 | 深圳市益玩网络科技有限公司 | 基于内存管理的对象创建方法、装置、设备及存储介质 |
CN116820766A (zh) * | 2023-06-29 | 2023-09-29 | 黑龙江起速网络科技有限公司 | 基于大数据技术的计算机资源分配系统及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11392461B2 (en) | Method and apparatus for processing information | |
CN112214388A (zh) | 内存监控方法、装置、设备及计算机可读存储介质 | |
CN106844136B (zh) | 一种程序崩溃信息的收集方法及系统 | |
CN107957941B (zh) | 移动终端内存泄漏处理方法和装置 | |
US10545775B2 (en) | Hook framework | |
US7908521B2 (en) | Process reflection | |
CN110365762B (zh) | 服务处理方法、装置、设备及存储介质 | |
US8918776B2 (en) | Self-adapting software system | |
CN107632929B (zh) | 一种检测内存泄漏的方法和装置 | |
US9575827B2 (en) | Memory management program, memory management method, and memory management device | |
WO2020248510A1 (zh) | 一种终端应用行为反射的处理方法 | |
CN111290740B (zh) | 应用程序的开发方法、装置、计算机设备和存储介质 | |
US11151020B1 (en) | Method and system for managing deployment of software application components in a continuous development pipeline | |
CN115407943A (zh) | 一种内存转储文件生成方法、装置、设备及可读存储介质 | |
CN113342554A (zh) | Io多路复用方法、介质、设备和操作系统 | |
CN115136133A (zh) | 按需代码执行的单次使用执行环境 | |
CN114816445A (zh) | 系统平台架构、函数发布方法及装置、平台及存储介质 | |
CN110347448B (zh) | 一种构造终端应用行为的运行时模型的方法 | |
CN108197005B (zh) | Ios应用的底层运行性能监测方法、介质、设备及系统 | |
CN116382713A (zh) | 构建应用镜像的方法、系统、设备和存储介质 | |
CN112416698A (zh) | 监控系统的扩展方法及装置、存储介质及电子设备 | |
CN115220873A (zh) | 一种在Android系统中运行Open Harmony应用的方法 | |
CN114721709A (zh) | 程序包生成方法、装置、存储介质及计算机设备 | |
CN113296802B (zh) | 虚拟机热升级方法、主机设备及存储介质 | |
CN115964061A (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 |