CN112306694A - 内存分析方法和装置、计算机可读存储介质、电子设备 - Google Patents

内存分析方法和装置、计算机可读存储介质、电子设备 Download PDF

Info

Publication number
CN112306694A
CN112306694A CN202011305172.1A CN202011305172A CN112306694A CN 112306694 A CN112306694 A CN 112306694A CN 202011305172 A CN202011305172 A CN 202011305172A CN 112306694 A CN112306694 A CN 112306694A
Authority
CN
China
Prior art keywords
memory
target
target process
management library
memory management
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.)
Granted
Application number
CN202011305172.1A
Other languages
English (en)
Other versions
CN112306694B (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.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network 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 Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN202011305172.1A priority Critical patent/CN112306694B/zh
Publication of CN112306694A publication Critical patent/CN112306694A/zh
Application granted granted Critical
Publication of CN112306694B publication Critical patent/CN112306694B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1448Management of the data involved in backup or backup restore
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/11File system administration, e.g. details of archiving or snapshots
    • G06F16/128Details of file system snapshots on the file-level, e.g. snapshot creation, administration, deletion

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)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本公开实施例是关于一种内存分析方法和装置、计算机可读存储介质、电子设备,涉及计算机技术领域,该方法包括:获取目标进程的内存数据快照,并根据所述内存数据快照得到所述目标进程的内存地址映射信息;确定目标进程所在的目标软件使用的内存管理库,并基于所述内存管理库得到所述内存地址映射信息中所包括的内存块;获取所述内存块中存在的目标进程的进程对象,并对所述目标进程的进程对象在所述内存块中所占用的内存大小进行分析。本公开实施例一方面不需要重新编译生成目标软件的可执行文件,提高了内存分析的安全性;另一方面,使得内存中各种进程对象都能得到分析,提高了内存分析的完整度。

Description

内存分析方法和装置、计算机可读存储介质、电子设备
技术领域
本发明实施例涉及计算机技术领域,具体而言,涉及一种应用于对由动态编程语言编写的服务端程序软件的进程进行内存分析。
背景技术
目前,在服务端软件程序中,消耗硬件资源的主要有CPU、内存、硬盘输入/输出(Input/Output,I/O)以及网络输入/输出。每个服务器的内存都是有限的,以阿里云的云服务器为例,不同规格服务器的内存都在1GB到256GB之间,那对于以TB计算容量的硬盘,内存的成本更为高昂。服务端软件程序通常需要做资源消耗分析,通过降低资源消耗进而减少硬件成本,其中,内存是一个非常重要的优化方向。
为了做好内存优化,需要对服务端软件的内存占用情况进行分析。目前很多编程语言都提供了内存分析工具,例如Python的tracemalloc(一个调试工具,用于跟踪Python分配的内存块)、objgraph(一个模块,用于展示Python对象图)。
但是,使用这些内存分析工具存在以下缺陷:需要对目标软件的可执行文件进行重新编译;并且,不能获取内存块中所包含的目标进程的所有进程对象。
因此,需要提供一种新的内存分析方法。
需要说明的是,在上述背景技术部分发明的信息仅用于加强对本发明的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本发明的目的在于提供一种内存分析方法、内存分析装置、计算机可读存储介质以及电子设备,进而至少在一定程度上克服由于相关技术的限制和缺陷而导致的需要重新编译可执行文件并且无法对目标进程的所有进程对象进行分析的问题。
根据本公开的一个方面,提供一种内存分析方法,其特征在于,包括:
获取目标进程的内存数据快照,并根据所述内存数据快照得到所述目标进程的内存地址映射信息;
确定目标进程所在的目标软件使用的内存管理库,并基于所述内存管理库得到所述内存地址映射信息中所包括的内存块;
获取所述内存块中存在的目标进程的进程对象,并对所述目标进程的进程对象在所述内存块中所占用的内存大小进行分析。
在本公开的一种示例性实施例中,获取目标进程的内存数据快照,包括:
调用分叉函数,创建与所述目标进程对应的子进程;
将所述目标进程的内存数据复制到所述子进程中,形成所述目标进程的内存数据快照。
在本公开的一种示例性实施例中,根据所述内存数据快照得到所述目标进程的内存地址映射信息,包括:
通过调试工具生成所述内存数据快照的核心映像文件;
从所述核心映像文件、所述核心映像文件对应的可执行文件以及所述可执行文件对应的动态库中所包含的文件中获取所述目标进程的内存地址映射信息。
在本公开的一种示例性实施例中,确定目标进程所在的目标软件使用的内存管理库,包括:
根据所述可执行文件对应的动态库中所包含的文件的文件名,判断是否包含第三方内存管理库;
如果包含第三方内存管理库,则将所述第三方内存管理库作为所述目标进程所在的目标软件使用的内存管理库;
如果不包含第三方内存管理库,则将标准C语言库默认的内存管理库作为所述目标进程所在的目标软件使用的内存管理库。
在本公开的一种示例性实施例中,确定目标进程所在的目标软件使用的内存管理库,还包括:
通过解析所述核心映像文件对应的可执行文件中的符号表,查看所述符号表是否包含第三方内存管理库的关键符号,所述关键符号为第三方内存管理库对所述目标进程管理时获得的内存分配区的主分配区的符号;
如果所述符号表包含第三方内存管理库的关键符号,则将所述第三方内存管理库作为所述目标进程所在的目标软件使用的内存管理库;
如果所述符号表不包含第三方内存管理库的关键符号,则将所述标准C语言库默认的内存管理库作为所述目标进程所在的目标软件使用的内存管理库。
在本公开的一种示例性实施例中,基于所述内存管理库得到所述内存地址映射信息中所包括的内存块,包括:
基于所述内存管理库,根据所述可执行文件对应的动态库的定位规则,计算所述内存管理库的关键符号在所述内存中的具体位置,所述定位规则为将所述内存管理库的关键符号在动态库中的相对地址映射到所述内存中的具体地址;
基于所述内存管理库的源代码,确定所述内存分配区在虚拟内存中的布局规则,所述布局规则为对所述内存分配区再次进行划分获得内存块;
通过所述内存管理库的关键符号在所述内存中的具体位置以及所述内存分配区在虚拟内存中的布局规则,获得所述内存地址映射信息中所包括的内存块。
在本公开的一种示例性实施例中,在获取所述内存块中存在的目标进程的进程对象之前,所述内存分析方法还包括:
获取所述内存块对应的年轻代垃圾回收链表头部的真实内存地址,通过所述真实内存地址访问所述内存块的年轻代垃圾回收链表、中年代垃圾回收链表以及老年代垃圾回收链表;
获取所述年轻代垃圾回收链表、所述中年代垃圾回收链表以及所述老年代垃圾回收链表中所有被垃圾回收跟踪的目标进程的进程对象;
访问所述所有被垃圾回收跟踪的目标进程的进程对象的类型字段,确定所述目标进程的进程对象类型的对象地址。
在本公开的一种示例性实施例中,获取所述内存块中存在的目标进程的进程对象,包括:
基于所述所有被垃圾回收跟踪的进程对象类型的对象地址,获取所述内存地址映射信息中所包括的内存块中所存在的目标进程的进程对象。
在本公开的一种示例性实施例中,在对所述目标进程的进程对象在所述内存块中所占用的内存大小进行分析之后,所述内存分析方法还包括:
根据所述目标进程的进程对象内存大小的分析结果,对内存消耗进行定位。
根据本公开的一个方面,提供一种内存分析装置,其特征在于,包括:
内存地址映射信息获取模块,用于获取目标进程的内存数据快照,并根据所述内存数据快照获取所述目标进程的内存地址映射信息;
内存块获取模块,用于确定目标进程所在的目标软件使用的内存管理库,并基于所述内存管理库得到所述内存地址映射信息中所包括的内存块;
进程对象内存分析模块,用于获取所述内存块中存在的目标进程的进程对象,并对所述目标进程的进程对象在所述内存块中所占用的内存大小进行分析。
根据本公开的一个方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一示例性实施例所述的内存分析方法。
根据本公开的一个方面,提供一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行上述任意一示例性实施例所述的内存分析方法。
本发明实施例提供一种内存分析方法,一方面获取目标进程的内存数据快照,并根据所述内存数据快照得到所述目标进程的内存地址映射信息;确定目标进程所在的目标软件使用的内存管理库,并基于所述内存管理库得到所述内存地址映射信息中所包括的内存块;获取所述内存块中存在的目标进程的进程对象,并对所述目标进程的进程对象在所述内存块中所占用的内存大小进行分析,由于基于目标进程的数据快照进行内存分析,为非侵入性的独立运行,因此不需要重新编译生成目标软件的可执行文件,提高了内存分析的安全性;另一方面,获取内存块中所包含的目标进程的所有进程对象并进行分析,使得内存中目标进程的各种进程对象都能得到分析,提高了内存分析的完整度;进一步的,由于在分析过程中仅生成目标进程的内存数据快照,所以该内存分析方法运行时本身占用的内存很小,因此可以在本身内存资源紧张的事故现场使用。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示意性示出根据本发明示例实施例的一种内存分析方法的流程图。
图2示意性示出根据本发明示例实施例的一种内存分析系统的框图。
图3示意性输出根据本发明示例实施例的展示模块所包括的第一级界面的场景示意图。
图4示意性输出根据本发明示例实施例的展示模块所包括的第二级界面的场景示意图。
图5示意性输出根据本发明示例实施例的展示模块所包括的第三级界面的场景示意图。
图6示意性示出根据本发明示例实施例的一种获取目标进程的内存数据快照的流程图。
图7示意性示出本发明示例实施例的一种在获取内存块中存在的进程对象之前内存分析方法的流程图。
图8示意性示出本发明示例实施例的一种内建容器对象类型的框图。
图9示意性示出本发明示例实施例的一种内存分析装置的框图。
图10示意性示出本发明示例实施例的一种用于实现上述内存分析方法的电子设备。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本发明将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本发明的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本发明的各方面变得模糊。
此外,附图仅为本发明的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
在内存分析中,很多编程语言都有内存分析工具,如Python的tracemalloc(一个调试工具,用于跟踪Python分配的内存块)、objgraph(一个模块,用于展示Python对象图),但这些工具都有着各种各样的限制:
Tracemalloc依靠回调函数回调Python的内存分配/释放接口,查看每行代码的内存分配情况。Tracemalloc会对程序运行时的性能产生较大影响,不能在线上环境启用。此外,Linux发行版本所使用的Python2.7不支持tracemalloc,想要使用tracemalloc,必须修改源代码再进行编译。
Objgraph依靠Python编程语言的动态性,在目标进程实时运行过程中,分析比较Python虚拟机中对象的个数。Objgraph分析的对象只能是被垃圾收集器跟踪的对象,但是Python对元组和字典做了优化,当容器内的元素都不需要被垃圾收集器跟踪时,容器本身也不会被垃圾收集器跟踪,此时由简单类型构成的字典就不会被垃圾收集器跟踪,Objgraph就无法对其进行分析。其次,Objgraph无法区分内建容器的种类,一旦内存问题由字典这样的内建容器引起,要找到真正有问题的字典示例很不容易。再次,Objgraph按照对象类型的个数种类来统计数据,不同类型的实例个数不等同于实际占用内存的多少,只能用来辅助判断,不能直观看出内存大小。最后,Objgraph统计分支需要占用目标进程一段客观的CPU时间,而且依赖用户在线调试随时输入代码,当代码输入错误时,很有可能影响到正常服务。
为了解决上述缺陷,发明人尝试基于非侵入式的独立运行方式,对服务端程序软件的进程进行内存分析。具体而言,首先,生成目标进程的内存数据快照并获得目标进程的地址映射信息;其次,通过目标进程所在的软件使用的内存管理库,得到目标进程所有的内存块;最后,获取内存块中存在的进程对象,并对所述进程对象在所述内存块中所占用的内存大小进行分析。
本示例实施方式中首先提供一种内存分析方法,该方法可以运行于服务器、服务器集群或云服务器等;当然,本领域技术人员也可以根据需求在其他平台运行本发明的方法,本示例性实施例中对此不做特殊限定。参考图1所示,该内存分析方法可以包括以下步骤:
步骤S110.获取目标进程的内存数据快照,并根据所述内存数据快照得到所述目标进程的内存地址映射信息;
步骤S120.确定目标进程所在的目标软件使用的内存管理库,并基于所述内存管理库得到所述内存地址映射信息中所包括的内存块;
步骤S130.获取所述内存块中存在的目标进程的进程对象,并对所述目标进程的进程对象在所述内存块中所占用的内存大小进行分析。
上述内存分析方法中,一方面获取目标进程的内存数据快照,并根据所述内存数据快照得到所述目标进程的内存地址映射信息;确定目标进程所在的目标软件使用的内存管理库,并基于所述内存管理库得到所述内存地址映射信息中所包括的内存块;获取所述内存块中存在的目标进程的进程对象,并对所述目标进程的进程对象在所述内存块中所占用的内存大小进行分析,由于基于目标进程的数据快照进行内存分析,为非侵入性的独立运行,因此不需要重新编译生成目标软件的可执行文件,提高了内存分析的安全性;另一方面,获取内存块中所包含的目标进程的所有进程对象并进行分析,使得内存中目标进程的各种进程对象都能得到分析,提高了内存分析的完整度;进一步的,由于在分析过程中仅生成目标进程的内存数据快照,所以该内存分析方法运行时本身占用的内存很小,因此可以在本身内存资源紧张的事故现场使用。
以下,将结合附图对本发明示例实施例内存分析方法中的各步骤进行详细的解释以及说明。
首先,对本发明示例实施例的发明目的进行解释以及说明。具体的,在本发明中,主要研究如何对内存进行分析,精准给出各种对象的占用内存大小。因为在传统的内存分析方法中,首先,需要重新编译可执行文件;其次,不能获取所有的进程对象,因而无法进行全面的分析,故本发明尝试提出一种非侵入式的内存分析方法,一方面,不需要重新编译可执行文件,另一方面,可以获取内存中所有的进程对象,并对所有的进程对象进行分析。
其次,对本发明示例实施例中涉及的内存分析系统进行解释以及说明。
参考图2所示,该内存分析系统可以包括内存地址映射信息模块210、内存块获得模块220、内存分析模块230以及显示模块240。其中:
内存地址映射信息模块210,用于获取目标进程对应的内存地址映射信息;其中,内存地址映射信息为:内存地址、偏移量以及对应的文件路径;
内存块获得模块220,与所述内存地址映射信息模块210网络连接,用于获得目标进程所有的内存块;
内存分析模块230:与内存块获得模块220网络连接,用于收集所述目标进程所有的内存块中的所有进程对象,对所述进程对象进行分类并进行内存分析;其中,进程对象可以为内建容器对象,内建容器的类型可以包括:内存大小固定的容器,例如可以包括元组;内存大小不固定的容器,例如可以包括列表、集合或者不能再添加或删除元素的集合;内存大小不固定的键值对映射容器,例如可以包括字典;
展示模块240:与内存分析模块230网络连接,用于提供操作界面,该操作界面可以对每种类型的进程对象的内存大小进行展示,以便于对内存消耗的主要原因进行定位。其中操作界面包括:第一级界面、第二级界面、第三级界面,参考图3所示,第一级界面用于展示每类对象的占用内存大小,参考图4所示,第二级界面用于展示每类对象具体的每一个对象的ID,参考图5所示,第三级界面用于展示每个对象的引用图,以及该对象关联的代码文本。
以下,将结合上述内存分析系统对步骤S110-步骤S130进行解释以及说明。
在步骤S110中,获取目标进程的内存数据快照,并根据所述内存数据快照得到所述目标进程的内存地址映射信息。
在本示例实施例中,参考图6所示,获取目标进程的内存数据快照,可以包括步骤S610以及步骤S620:
在步骤S610中,调用分叉函数,创建与所述目标进程对应的子进程。
在本示例实施例中,首先,目标进程调用分叉函数,其中分叉函数用于复制目标进程来创建子进程;其次,创建子进程的同时调用sleep函数,使子进程停止执行新代码。
在步骤S620中,将所述目标进程的内存数据复制到所述子进程中,形成所述目标进程的内存数据快照。
在本示例实施例中,子进程通过分差函数对应的写时拷贝技术,将目标进程的内存数据复制到子进程中,使得子进程与父进程拥有一样的内存数据,即内存数据快照。
进一步的,当得到内存数据快照后,还需要根据所述内存数据快照得到所述目标进程的内存地址映射信息,具体的:通过调试工具生成所述内存数据快照的核心映像文件;从所述核心映像文件、所述核心映像文件对应的可执行文件以及所述可执行文件对应的动态库中所包含的文件中获取所述目标进程的内存地址映射信息。
举例来说,首先,通过GDB调试工具中的gcore命令(用于生成程序的核心文件)来生成内存数据快照的核心映像文件,即目标进程的核心映像文件,其中核心映像文件、核心映像文件对应的可执行文件以及可执行文件对应的动态库中所包含的文件构成目标进程当时内存的所有数据;其次,利用虚拟文件系统接口/proc/{pid}/maps读取目标进程当时内存的所有数据;最后,获得目标进程的内存地址映射信息。
在步骤S120中,确定目标进程所在的目标软件使用的内存管理库,并基于所述内存管理库得到所述内存地址映射信息中所包括的内存块。
在本示例实施例中,确定目标进程所在的目标软件使用的内存管理库,包括:根据所述可执行文件对应的动态库中所包含的文件的文件名,判断是否包含第三方内存管理库;如果包含第三方内存管理库,则将所述第三方内存管理库作为所述目标进程所在的目标软件使用的内存管理库;如果不包含第三方内存管理库,则将标准C语言库默认的内存管理库作为所述目标进程所在的目标软件使用的内存管理库。
具体的,通过虚拟文件系统接口/proc/{pid}/maps中加载的动态库中所包含的文件的文件名,判断是否包含有第三方内存管理库,其中第三方内存管理库可以为tcmalloc,也可以为malloc,本示例对此不作特殊限定。如果包含tcmalloc或者malloc第三方内存管理库,则将tcmalloc或者malloc第三方内存管理库作为所述目标进程所在的目标软件使用的内存管理库。如果不包含第三方内存管理库,则将标准C语言库默认的内存管理库作为所述目标进程所在的目标软件使用的内存管理库,其中标准C语言库默认的内存管理库为glibc。
在本示例实施例中,确定目标进程所在的目标软件使用的内存管理库,还包括:通过解析所述核心映像文件对应的可执行文件中的符号表,查看所述符号表是否包含第三方内存管理库的关键符号,所述关键符号为第三方内存管理库对所述目标进程管理时获得的内存分配区的主分配区的符号;如果所述符号表包含第三方内存管理库的关键符号,则将所述第三方内存管理库作为所述目标进程所在的目标软件使用的内存管理库;如果所述符号表不包含第三方内存管理库的关键符号,则将所述标准C语言库默认的内存管理库作为所述目标进程所在的目标软件使用的内存管理库。
具体的,通过解析核心映像文件对应的可执行文件中的符号表,查看符号表是否包含第三方内存管理库的关键符号,其中关键符号为第三方内存管理库对目标进程管理时获得的内存分配区的主分配区的符号,例如tcmalloc的`tcmalloc::Static::pageheap_`符号,标准C语言库默认的内存管理库的ptmalloc的`main_arena`符号;如果符号表包含第三方内存管理库的关键符号,则将第三方内存管理库作为目标进程所在的目标软件使用的内存管理库;如果符号表不包含第三方内存管理库的关键符号,则将标准C语言库默认的内存管理库作为所述目标进程所在的目标软件使用的内存管理库。
进一步的,在本示例实施例中,当得到内存管理库后,还需要基于所述内存管理库得到所述内存地址映射信息中所包括的内存块,包括:
基于所述内存管理库,根据所述可执行文件对应的动态库的定位规则,计算所述内存管理库的关键符号在所述内存中的具体位置,所述定位规则为将所述内存管理库的关键符号在动态库中的相对地址映射到所述内存中的具体地址;
基于所述内存管理库的源代码,确定所述内存分配区在虚拟内存中的布局规则,所述布局规则为对所述内存分配区再次进行划分获得内存块;
通过所述内存管理库的关键符号在所述内存中的具体位置以及所述内存分配区在虚拟内存中的布局规则,获得所述内存地址映射信息中所包括的内存块。
具体的,首先,基于内存管理库,将内存管理库的关键符号在动态库中的相对地址映射到内存中的具体地址,得到内存管理库的关键符号在内存中的具体地址,例如,得到`tcmalloc::Static::pageheap_`在内存中的具体位置,或者`main_arena`在内存中的具体位置;其次,基于所述内存管理库的源代码,确定内存分配区再次进行划分的规则;最后,通过内存管理库的关键符号在内存中的具体位置以及内存分配区再次进行划分的规则,获得内存地址映射信息中所包括的内存块的地址和大小。
在步骤S130中,获取所述内存块中存在的目标进程的进程对象,并对所述目标进程的进程对象在所述内存块中所占用的内存大小进行分析。
在本示例实施例中,目标进程的进程对象可以为Python类型的内建容器对象,参考图7所示,为了获取内存块中目标进程的所有进程对象,保证内存分析的完整度,在获取所述内存块中存在的目标进程的进程对象之前,所述内存分析方法还可以包括步骤S710、步骤S720以及步骤S730:
在步骤S710中,获取所述内存块对应的年轻代垃圾回收链表头部的真实内存地址,通过所述真实内存地址访问所述内存块的年轻代垃圾回收链表、中年代垃圾回收链表以及老年代垃圾回收链表。
在本示例实施例中,通过定位符号`_PyGC_genertion0`,获取年轻代垃圾回收链表头部的真实内存地址,并通过年轻代垃圾回收链表头部的真实内存地址访问年轻代垃圾回收链表、中年代垃圾回收链表以及老年代垃圾回收链表,这3代垃圾回收链表中包含了所有需要被垃圾回收跟踪的目标进程的进程对象。
在步骤S720中,获取所述年轻代垃圾回收链表、所述中年代垃圾回收链表以及所述老年代垃圾回收链表中所有被垃圾回收跟踪的目标进程的进程对象。
在本示例实施例中,循环处理年轻代垃圾回收链表、中年代垃圾回收链表以及老年代垃圾回收链表,获取3代链表中的所有的目标进程的进程对象。
在步骤S730中,访问所述所有被垃圾回收跟踪的目标进程的进程对象的类型字段,确定所述目标进程的进程对象类型的对象地址。
在本示例实施例中,访问所有被垃圾回收跟踪的目标进程的进程对象的类型字段`ob_type`,确定所有被垃圾回收跟踪的进程对象类型的对象地址。
进一步的,在本示例实施例中,当得到目标进程的进程对象类型的对象地址以后,可以根据进程对象类型的对象地址获取所述内存块中存在的所有的进程对象。具体的可以包括:基于所述所有被垃圾回收跟踪的进程对象类型的地址,获取所述内存地址映射信息中所包括的内存块中所存在的目标进程的进程对象。
举例而言,当某块内存存放了一个进程对象,则该内存对应的类型字段`ob_type`中的数据一定是进程对象类型的对象地址,因此,根据步骤S330中获得的所有被垃圾回收跟踪的进程对象类型的对象地址,就可以得到内存地址映射信息中所包括的内存块中所存在的进程对象。
此外,在得到内存地址映射信息中所包括的内存块中所存在的进程对象之后,还需要对进程对象进行分类。具体的,参考图8所示,以Python动态语言为例,内建容器对象的类型包括:
内存大小固定的容器,包括:元组。可以按照容器的大小以及容器内元素的类型进行分类,例如(1,“abc”,1.0)可以分类为(int,str,float),其中int表示集合内的元素的类型为整型,str表示集合内的元素的类型为字符串,float表示集合内的元素的类型为浮点型;
内存大小不固定的容器,包括:列表(list)、集合(set)、或者不能再添加或删除元素的集合(frozen set)。首先,将容器内存大小按照2的倍数划分不同的范围,例如,当内存大小为800时,可以划分到512到1024之间;当内存大小为130时,可以划分为128到256之间;其次,确定容器内所有元素的类型集合,例如,[1,2,3,1.0,2.0,3.0]的类型集合为[int,float]<8,其中[]表示对象类型为列表,int表示集合内元素的类型为整型,float表示集合内元素的类型为浮点型,<8表示集合的长度小于8。
内存大小不固定的键值对映射容器,包括:字典。其中,字典的类型可以包括:
字典是其他对象的_dict_属性,则字典和具有_dict_属性的对象属于同一类。
键值是常见的字面值类型,存在大量的格式为{"itemId":...,"itemName":...}的字典,则将字典按照键值的字面值进行分类,都属于{"itemId","itemName"}。其中,字面值类型可以包括:整型、字符串、unicode码点序列的字符串、浮点型;"itemId"表示字典中元素的键值为对象的ID,"itemName"表示字典中元素的值为对象的名称。
基于键值对的类型进行分类,当键值对的类型均为整型时,属于{int=>int};当键值对的键位字符串类型,值为整型或者字符串类型时,属于{str=>int,str=>str}。
基于字典中元素的个数进行分类,当字典中元素的个数为0时,属于{},当字典中元素的个数在1到16之间,则属于{type…}<16;当字典中元素的个数在16到32之间,则属于{type…}<32;当字典中元素的个数在32到64之间,则属于{type…}<64。
进一步的,在本示例实施例中,为了对内存消耗进行定位,所述内存分析方法还可以包括:根据所述目标进程的进程对象内存大小的分析结果,对内存消耗进行定位。
此处需要补充说明的是,本发明示例实施例也可以应用于以Lua动态语言生成的内建容器对象,其对应的内存分析方法与本申请所记载的内存分析方法类似,此处不再赘述。
本发明实施例提供的内存分析方法,独创性地设计了非侵入式的内存分析模型。此外,也开创性地将这一非侵入式的内存分析模型融入到内存分析方法中,不需要重新编译生成目标软件的可执行文件,就可进行内存分析;此外,可以获取内存块中所包含的所有目标进程的进程对象并对获取的目标进程的进程对象的类型进行分类,使得内存中各种进程对象都能得到分析,提高了内存分析的完整度。
本示例实施方式还提供了一种内存分析装置,参考图9所示,该内存分析装置可以包括内存地址映射信息获取模块910、内存块获取模块920以及进程对象内存分析模块930。其中:
内存地址映射信息获取模块910,可以用于获取目标进程的内存数据快照,并根据所述内存数据快照获取所述目标进程的内存地址映射信息;
内存块获取模块920,可以用于确定目标进程所在的目标软件使用的内存管理库,并基于所述内存管理库得到所述内存地址映射信息中所包括的内存块;
进程对象内存分析模块930,可以用于获取所述内存块中存在的目标进程的进程对象,并对所述目标进程的进程对象在所述内存块中所占用的内存大小进行分析。
在本公开的一种示例性实施例中,获取目标进程的内存数据快照,包括:
调用分叉函数,创建与所述目标进程对应的子进程;
将所述目标进程的内存数据复制到所述子进程中,形成所述目标进程的内存数据快照。
在本公开的一种示例性实施例中,根据所述内存数据快照得到所述目标进程的内存地址映射信息,包括:
通过调试工具生成所述内存数据快照的核心映像文件;
从所述核心映像文件、所述核心映像文件对应的可执行文件以及所述可执行文件对应的动态库中所包含的文件中获取所述目标进程的内存地址映射信息。
在本公开的一种示例性实施例中,确定目标进程所在的目标软件使用的内存管理库,包括:
根据所述可执行文件对应的动态库中所包含的文件的文件名,判断是否包含第三方内存管理库;
如果包含第三方内存管理库,则将所述第三方内存管理库作为所述目标进程所在的目标软件使用的内存管理库;
如果不包含第三方内存管理库,则将标准C语言库默认的内存管理库作为所述目标进程所在的目标软件使用的内存管理库。
在本公开的一种示例性实施例中,确定目标进程所在的目标软件使用的内存管理库,还包括:
通过解析所述核心映像文件对应的可执行文件中的符号表,查看所述符号表是否包含第三方内存管理库的关键符号,所述关键符号为第三方内存管理库对所述目标进程管理时获得的内存分配区的主分配区的符号;
如果所述符号表包含第三方内存管理库的关键符号,则将所述第三方内存管理库作为所述目标进程所在的目标软件使用的内存管理库;
如果所述符号表不包含第三方内存管理库的关键符号,则将所述标准C语言库默认的内存管理库作为所述目标进程所在的目标软件使用的内存管理库。
在本公开的一种示例性实施例中,基于所述内存管理库得到所述内存地址映射信息中所包括的内存块,包括:
基于所述内存管理库,根据所述可执行文件对应的动态库的定位规则,计算所述内存管理库的关键符号在所述内存中的具体位置,所述定位规则为将所述内存管理库的关键符号在动态库中的相对地址映射到所述内存中的具体地址;
基于所述内存管理库的源代码,确定所述内存分配区在虚拟内存中的布局规则,所述布局规则为对所述内存分配区再次进行划分获得内存块;
通过所述内存管理库的关键符号在所述内存中的具体位置以及所述内存分配区在虚拟内存中的布局规则,获得所述内存地址映射信息中所包括的内存块。
在本公开的一种示例性实施例中,在获取所述内存块中存在的目标进程的进程对象之前,所述内存分析方法还包括:
获取所述内存块对应的年轻代垃圾回收链表头部的真实内存地址,通过所述真实内存地址访问所述内存块的年轻代垃圾回收链表、中年代垃圾回收链表以及老年代垃圾回收链表;
获取所述年轻代垃圾回收链表、所述中年代垃圾回收链表以及所述老年代垃圾回收链表中所有被垃圾回收跟踪的目标进程的进程对象;
访问所述所有被垃圾回收跟踪的目标进程的进程对象的类型字段,确定所述目标进程的进程对象类型的对象地址。
在本公开的一种示例性实施例中,获取所述内存块中存在的目标进程的进程对象,包括:
基于所述所有被垃圾回收跟踪的进程对象类型的对象地址,获取所述内存地址映射信息中所包括的内存块中所存在的目标进程的进程对象。
在本公开的一种示例性实施例中,在对所述目标进程的进程对象在所述内存块中所占用的内存大小进行分析之后,所述内存分析方法还包括:
根据所述目标进程的进程对象内存大小的分析结果,对内存消耗进行定位。
上述内存分析装置中各模块的具体细节已经在对应的内存分析方法中进行了详细的描述,因此此处不再赘述。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,尽管在附图中以特定顺序描述了本发明中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
在本发明的示例性实施例中,还提供了一种能够实现上述方法的电子设备。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
下面参照图10来描述根据本发明的这种实施方式的电子设备1000。图10显示的电子设备1000仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图10所示,电子设备1000以通用计算设备的形式表现。电子设备1000的组件可以包括但不限于:上述至少一个处理单元1010、上述至少一个存储单元1020、连接不同系统组件(包括存储单元1020和处理单元1010)的总线1030以及显示单元1040。
其中,所述存储单元存储有程序代码,所述程序代码可以被所述处理单元1010执行,使得所述处理单元1010执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。例如,所述处理单元1010可以执行如图2中所示的步骤S110:从源数据库中读取事务日志并将所述事务日志存储到多个第一环形队列中;S120:将各所述第一环形队列中的事务日志存储至第二环形队列中,并将所述第二环形队列中的事务日志发送至与目标数据库建立连接的线程;步骤S130:由所述线程将所述事务日志写入所述目标数据库并记录成功写入的事务日志所对应的日志编码。
存储单元1020可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)10201和/或高速缓存存储单元10202,还可以进一步包括只读存储单元(ROM)10203。
存储单元1020还可以包括具有一组(至少一个)程序模块10205的程序/实用工具10204,这样的程序模块10205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线1030可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备1000也可以与一个或多个外部设备1100(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备1000交互的设备通信,和/或与使得该电子设备1000能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1050进行。并且,电子设备1000还可以通过网络适配器1060与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器1060通过总线1030与电子设备1000的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备1000使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本发明实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本发明实施方式的方法。
在本发明的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。
根据本发明的实施方式的用于实现上述方法的程序产品,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
此外,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
本领域技术人员在考虑说明书及实践这里发明的发明后,将容易想到本发明的其他实施例。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未发明的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由权利要求指出。

Claims (12)

1.一种内存分析方法,其特征在于,包括:
获取目标进程的内存数据快照,并根据所述内存数据快照得到所述目标进程的内存地址映射信息;
确定目标进程所在的目标软件使用的内存管理库,并基于所述内存管理库得到所述内存地址映射信息中所包括的内存块;
获取所述内存块中存在的目标进程的进程对象,并对所述目标进程的进程对象在所述内存块中所占用的内存大小进行分析。
2.根据权利要求1所述的内存分析方法,其特征在于,获取目标进程的内存数据快照,包括:
调用分叉函数,创建与所述目标进程对应的子进程;
将所述目标进程的内存数据复制到所述子进程中,形成所述目标进程的内存数据快照。
3.根据权利要求1所述的内存分析方法,其特征在于,根据所述内存数据快照得到所述目标进程的内存地址映射信息,包括:
通过调试工具生成所述内存数据快照的核心映像文件;
从所述核心映像文件、所述核心映像文件对应的可执行文件以及所述可执行文件对应的动态库中所包含的文件中获取所述目标进程的内存地址映射信息。
4.根据权利要求3所述的内存分析方法,其特征在于,确定目标进程所在的目标软件使用的内存管理库,包括:
根据所述可执行文件对应的动态库中所包含的文件的文件名,判断是否包含第三方内存管理库;
如果包含第三方内存管理库,则将所述第三方内存管理库作为所述目标进程所在的目标软件使用的内存管理库;
如果不包含第三方内存管理库,则将标准C语言库默认的内存管理库作为所述目标进程所在的目标软件使用的内存管理库。
5.根据权利要求3所述的内存分析方法,其特征在于,确定目标进程所在的目标软件使用的内存管理库,还包括:
通过解析所述核心映像文件对应的可执行文件中的符号表,查看所述符号表是否包含第三方内存管理库的关键符号,所述关键符号为第三方内存管理库对所述目标进程管理时获得的内存分配区的主分配区的符号;
如果所述符号表包含第三方内存管理库的关键符号,则将所述第三方内存管理库作为所述目标进程所在的目标软件使用的内存管理库;
如果所述符号表不包含第三方内存管理库的关键符号,则将标准C语言库默认的内存管理库作为所述目标进程所在的目标软件使用的内存管理库。
6.根据权利要求4或5所述的内存分析方法,其特征在于,基于所述内存管理库得到所述内存地址映射信息中所包括的内存块,包括:
基于所述内存管理库,根据所述可执行文件对应的动态库的定位规则,计算所述内存管理库的关键符号在所述内存中的具体位置,所述定位规则为将所述内存管理库的关键符号在动态库中的相对地址映射到所述内存中的具体地址;
基于所述内存管理库的源代码,确定所述内存分配区在虚拟内存中的布局规则,所述布局规则为对所述内存分配区再次进行划分获得内存块;
通过所述内存管理库的关键符号在所述内存中的具体位置以及所述内存分配区在虚拟内存中的布局规则,获得所述内存地址映射信息中所包括的内存块。
7.根据权利要求1所述的内存分析方法,其特征在于,在获取所述内存块中存在的目标进程的进程对象之前,所述内存分析方法还包括:
获取所述内存块对应的年轻代垃圾回收链表头部的真实内存地址,通过所述真实内存地址访问所述内存块的年轻代垃圾回收链表、中年代垃圾回收链表以及老年代垃圾回收链表;
获取所述年轻代垃圾回收链表、所述中年代垃圾回收链表以及所述老年代垃圾回收链表中所有被垃圾回收跟踪的目标进程的进程对象;
访问所述所有被垃圾回收跟踪的目标进程的进程对象的类型字段,确定所述目标进程的进程对象类型的对象地址。
8.根据权利要求7所述的内存分析方法,其特征在于,获取所述内存块中存在的目标进程的进程对象,包括:
基于所述所有被垃圾回收跟踪的进程对象类型的对象地址,获取所述内存地址映射信息中所包括的内存块中所存在的目标进程的进程对象。
9.根据权利要求1所述的内存分析方法,其特征在于,在对所述目标进程的进程对象在所述内存块中所占用的内存大小进行分析之后,所述内存分析方法还包括:
根据所述目标进程的进程对象内存大小的分析结果,对内存消耗进行定位。
10.一种内存分析装置,其特征在于,包括:
内存地址映射信息获取模块,用于获取目标进程的内存数据快照,并根据所述内存数据快照获取所述目标进程的内存地址映射信息;
内存块获取模块,用于确定目标进程所在的目标软件使用的内存管理库,并基于所述内存管理库得到所述内存地址映射信息中所包括的内存块;
进程对象内存分析模块,获取所述内存块中存在的目标进程的进程对象,并对所述目标进程的进程对象在所述内存块中所占用的内存大小进行分析。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-9任一项所述的内存分析方法。
12.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1-9任一项所述的内存分析方法。
CN202011305172.1A 2020-11-19 2020-11-19 内存分析方法和装置、计算机可读存储介质、电子设备 Active CN112306694B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011305172.1A CN112306694B (zh) 2020-11-19 2020-11-19 内存分析方法和装置、计算机可读存储介质、电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011305172.1A CN112306694B (zh) 2020-11-19 2020-11-19 内存分析方法和装置、计算机可读存储介质、电子设备

Publications (2)

Publication Number Publication Date
CN112306694A true CN112306694A (zh) 2021-02-02
CN112306694B CN112306694B (zh) 2024-05-10

Family

ID=74335052

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011305172.1A Active CN112306694B (zh) 2020-11-19 2020-11-19 内存分析方法和装置、计算机可读存储介质、电子设备

Country Status (1)

Country Link
CN (1) CN112306694B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117453548A (zh) * 2023-10-26 2024-01-26 上海合芯数字科技有限公司 代码模块信息确定方法、装置、计算机设备和存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010042058A1 (en) * 1998-07-09 2001-11-15 Robert J. Harrington Apparatus and method for managing memory use by software objects
US20140053272A1 (en) * 2012-08-20 2014-02-20 Sandor Lukacs Multilevel Introspection of Nested Virtual Machines
CN106909457A (zh) * 2015-12-23 2017-06-30 北京奇虎科技有限公司 内存管理方法及装置
CN106909458A (zh) * 2015-12-23 2017-06-30 北京奇虎科技有限公司 内存管理方法及装置
CN111240801A (zh) * 2020-01-06 2020-06-05 北京字节跳动网络技术有限公司 生成堆内存快照文件的方法、装置、介质和电子设备
CN111611145A (zh) * 2020-05-29 2020-09-01 北京字节跳动网络技术有限公司 崩溃信息收集方法、装置、存储介质及电子设备

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010042058A1 (en) * 1998-07-09 2001-11-15 Robert J. Harrington Apparatus and method for managing memory use by software objects
US20140053272A1 (en) * 2012-08-20 2014-02-20 Sandor Lukacs Multilevel Introspection of Nested Virtual Machines
CN106909457A (zh) * 2015-12-23 2017-06-30 北京奇虎科技有限公司 内存管理方法及装置
CN106909458A (zh) * 2015-12-23 2017-06-30 北京奇虎科技有限公司 内存管理方法及装置
CN111240801A (zh) * 2020-01-06 2020-06-05 北京字节跳动网络技术有限公司 生成堆内存快照文件的方法、装置、介质和电子设备
CN111611145A (zh) * 2020-05-29 2020-09-01 北京字节跳动网络技术有限公司 崩溃信息收集方法、装置、存储介质及电子设备

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
傅建明;刘秀文;汤毅;李鹏伟;: "内存地址泄漏分析与防御", 计算机研究与发展, no. 08, pages 184 - 204 *
陈蒙蒙;陈兴蜀;金鑫;: "基于进程生命周期的虚拟机隐藏进程检测技术", 计算机应用, no. 2, pages 44 - 48 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117453548A (zh) * 2023-10-26 2024-01-26 上海合芯数字科技有限公司 代码模块信息确定方法、装置、计算机设备和存储介质
CN117453548B (zh) * 2023-10-26 2024-05-24 上海合芯数字科技有限公司 代码模块信息确定方法、装置、计算机设备和存储介质

Also Published As

Publication number Publication date
CN112306694B (zh) 2024-05-10

Similar Documents

Publication Publication Date Title
CN107506300B (zh) 一种用户界面测试方法、装置、服务器和存储介质
CN111241111B (zh) 数据查询方法及装置、数据对比方法及装置、介质及设备
CN109872230B (zh) 金融数据分析系统的测试方法、装置、介质、电子设备
CN107885609B (zh) 业务冲突处理方法及装置、存储介质和电子设备
CN110058962A (zh) 确定虚拟机快照的一致性级别的方法、设备和计算机程序产品
CN116561146A (zh) 数据库日志记录方法、装置、计算机设备及计算机可读存储介质
CN110688096A (zh) 包含插件的应用程序的构建方法、装置、介质及电子设备
CN114253537A (zh) 表单生成方法及装置、电子设备和存储介质
US11036527B2 (en) Class splitting in object-oriented environments
CN112306694B (zh) 内存分析方法和装置、计算机可读存储介质、电子设备
CN113609008A (zh) 测试结果分析方法、装置和电子设备
CN112433888A (zh) 数据处理方法及装置、存储介质和电子设备
CN109344083B (zh) 一种程序调试方法、装置、设备及可读存储介质
CN111258802A (zh) 捕获应用程序崩溃信息的方法及相关设备
CN110716804A (zh) 无用资源的自动删除方法、装置、存储介质及电子设备
CN110716859A (zh) 自动为修改的代码推送测试用例的方法及相关装置
US20190146786A1 (en) Determining the availability of memory optimizations by analyzing a running binary
CN114564354A (zh) 数据库性能监控方法、装置、电子设备及存储介质
US11392371B2 (en) Identification of a partial code to be refactored within a source code
CN111741046B (zh) 数据上报方法、获取方法、装置、设备及介质
CN113672512A (zh) 代码检查规则生成方法、代码检查方法、装置、介质
CN110399296B (zh) 测试客户端与服务端之间交互接口的方法、系统和介质
CN109213569B (zh) 一种基于虚拟机的审计方法、装置、服务器及存储介质
CN112364268A (zh) 资源获取方法、装置、电子设备及存储介质
CN112162954A (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