本申请实施例提供了一种监控方法、装置及系统,该方法包括步骤:确定预定类型的操作访问预定的物理内存地址,则触发中断;根据触发所述中断的物理内存地址,确定第一可执行代码的入口地址;执行所述第一可执行代码,以对所述预定的物理内存地址进行数据监控。本申请实施例可提高定位内存数据故障源的效率,降低定位内存数据故障源的实现成本。
【技术实现步骤摘要】
监控方法、装置及系统
本申请涉及计算机
,尤其是涉及一种监控方法、装置及系统。
技术介绍
在日常的系统运维和调测过程中,内存数据故障导致的问题的来源通常是随机产生的,因而难以定位。类似的问题比如包括:i)踩内存:程序内存由于被异常代码修改而导致错误,但是异常代码源却难以确定;ii)系统引用计数错误:由于代码异常,在某些场景中添加了引用计数操作,但是却没有在匹配的场景下减少引用计数。iii);死锁问题:程序在运行过程中,触发死锁后,通常很容易就找到导致死锁的锁(通常为排它锁),但却无法确定导致死锁的锁当前被谁持有。目前,一般采用排除法或代码分析方法确定内存数据故障源。显然,这样的方式耗时耗力,实现成本高且效率低下。因此实现成本低且效率高的定位内存数据故障源的方案是人们所普遍希望的。
技术实现思路
本申请实施例的目的在于提供一种监控方法、装置及系统,以提高定位内存数据故障源的效率,降低定位内存数据故障源的实现成本。为达到上述目的,一方面,本申请实施例提供了一种监控方法,包括以下步骤:确定预定类型的操作访问预定的物理内存地址,则触发中断;根据触发所述中断的物理内存地址,确定第一可执行代码的入口地址;执行所述第一可执行代码,以对所述预定的物理内存地址进行数据监控。另一方面,本申请实施例还提供了一种监控装置,包括:中断触发模块,用于确定预定类型的操作访问预定的物理内存地址,则触发中断;地址确定模块,用于根据触发所述中断的物理内存地址,确定第一可执行代码的入口地址;数据监控模块,用于执行所述第一可执行代码,以对所述预定的物理内存地址进行数据监控。再一方面,本申请实施例还提供了一种内存数据监控系统,包括:处理器;存储器,用于存储监控装置,所述监控装置被所述处理器执行时,执行如下步骤:确定预定类型的操作访问预定的物理内存地址,则触发中断;根据触发所述中断的物理内存地址,确定第一可执行代码的入口地址;执行所述第一可执行代码,以对所述预定的物理内存地址进行数据监控。再一方面,本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如下步骤:确定预定类型的操作访问预定的物理内存地址,则触发中断;根据触发所述中断的物理内存地址,确定第一可执行代码的入口地址;执行所述第一可执行代码,以对所述预定的物理内存地址进行数据监控。由此可见,本申请实施例在指定监控范围内的内存地址被访问,且该访问属于预定类型的操作时,触发数据断点;并根据数据断点中的入口地址执行可执行代码,以根据可执行代码中的监控逻辑进行内存数据监控。这样,当需要监控何种类型的内存数据故障,就可以预先配置相应的监控逻辑。因此,与现有技术相比,本申请实施例这种自动定位内存数据故障源的方案提高了定位内存数据故障源的效率,降低了定位内存数据故障源的实现成本。附图说明此处所说明的附图用来提供对本申请实施例的进一步理解,构成本申请实施例的一部分,并不构成对本申请实施例的限定。在附图中:图1为本申请一实施例的数据断点配置流程图;图2为本申请一实施例的监控方法流程图;图3为本申请一实施例的页表结构示意图;图4为本申请一实施例的监控装置的结构框图;图5为本申请一实施例的监控系统的结构框图。具体实施方式为使本申请实施例的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本申请实施例做进一步详细说明。在此,本申请实施例的示意性实施例及其说明用于解释本申请实施例,但并不作为对本申请实施例的限定。在实现本申请过程中,本申请的专利技术人经过长期研究发现:虽然内存数据故障导致的问题难以定位。但是,在当前某块内存区或某个具体的内存地址出现内存数据故障时,如果能通过一个数据断点使当前内存访问停下来就好了,这样就可以方便的抓取关键信息(比如进程pid、堆栈信息等),以便于根据关键信息确定是谁导致的内存数据故障。基于这种思想,本申请的专利技术人还发现:比如Linux系统等一些操作系统支持数据断点的使用,但是,如果想通过数据断点实现内存数据故障源的定位,需要进行内核态编程,即需要编写内核模块并插入到操作系统中。由于内核模块编写和调试的难度极大,耗时费力,因此,基于这种方式的实现成本相当高,基本不具有可行性。本申请的专利技术人进一步研究发现:扩展的伯克利包过滤器(extendberkeleypacketfilter,ebpf)是一个由Berkeley提出的用于网络包过滤的过滤器。当用户需要根据预置的某些条件进行包过滤时(如根据网络包的协议类型、源/目的网络地址、包大小),可以自定义正则表达式来设置规则。对应的,正则表达式会被编译成ebpf语言,同时将编译好的数据传递给内核。在内核中,当有网络包到达时,ebpf引擎(即内核中内置的ebpf解释器,ebpf解释器能够加载ebpf可执代码并解析执行)会被调用,并通过执行ebpf可执代码判断当前的网络包是否为用户所需要的,如果是则记录相关信息。基于类似的思想,可考虑在用户态编写针对指定内存地址的内存监控代码,并将其编译成ebpf可执行代码加载到内核中;当内存被访问时,便可通过执行ebpf可执行代码实现针对指定内存地址的监控、过滤和记录,从而发现了一种监控内存数据故障的可行思路。下面结合附图,对本申请基于上述可行思路的具体实施方式作进一步的详细说明。本申请实施例中,要实现当数据断点被触发时,可在内核态利用数据断点中指定的用户态代码(即用户在用户态编写的程序代码)获取关键信息(比如进程pid、堆栈信息等),以便于根据这些关键信息确定内存数据故障,就需要预先配置这样的数据断点。参考图1所示,本申请实施例的数据断点配置可以包括如下步骤:S101、用户根据指定监控的内存地址范围和内存操作类型,编写监控逻辑脚本。本步骤是在用户态实现的,即用户可在用户态指定监控的内存地址范围和内存操作类型,并可在用户态根据指定监控的内存地址范围和内存操作类型,编写监控逻辑脚本。本申请一些实施方式中,指定监控的内存地址范围和内存操作类型均可由用户根据需要指定。所述的指定例如可以是用户通过系统提供的用户接口实现。其中,所述的用户接口例如可以是命令接口或图形界面接口等等。在本申请一些示例性实施方式中,指定监控的内存地址范围可通过起始地址+数据长度的方式实现;在本申请另一些示例性实施方式中,指定监控的内存地址范围还可过设定起止地址的方式实现,等等。本申请一些实施方式中,所述指定监控的内存地址范围可以为指定进程的内存逻辑地址范围、指定进程的内存线性地址范围、内核线性地址范围、内核逻辑地址范围、或者内核符号。其中,指定进程的可通过进程标识(pid,processidentifier)识别。本申请一些实施方式中,一般的,在编程语言中,内核符号指的是一个全局的变量或者函数。更一般地说,内核符号是一个代表着内存中指定空间的名称,这个空间存储着数据(可读或者可写的变量)或者指令(可以执行的函数)。以linux系统为例,为了使不同的内核功能单元能够更好地协同工作,linux内核中有着数以千计的内核符号,每个内核符号对应着内存中的指定空间,因此,本申请一些实施方式中可通过指定内核符号的方式来指定监控的内存地址范围。本申请一些实施方式中,所述预定类型的操作例如可以包括内存读本文档来自技高网...
【技术保护点】
1.一种监控方法,其特征在于,包括以下步骤:确定预定类型的操作访问预定的物理内存地址,则触发中断;根据触发所述中断的物理内存地址,确定第一可执行代码的入口地址;执行所述第一可执行代码,以对所述预定的物理内存地址进行数据监控。
【技术特征摘要】
1.一种监控方法,其特征在于,包括以下步骤:确定预定类型的操作访问预定的物理内存地址,则触发中断;根据触发所述中断的物理内存地址,确定第一可执行代码的入口地址;执行所述第一可执行代码,以对所述预定的物理内存地址进行数据监控。2.根据权利要求1所述的监控方法,其特征在于,所述根据触发所述中断的物理内存地址,确定第一可执行代码的入口地址,包括:根据触发所述中断的物理内存地址,确定对应的数据断点;确定所述数据断点中的第一可执行代码的入口地址。3.根据权利要求1所述的监控方法,其特征在于,所述对所述预定的物理内存地址进行数据监控,包括:判断所述物理内存地址是否存在指定类型的内存数据故障;如果存在,则按照所述第一可执行代码中的监控逻辑,实时抓取所述物理内存地址的状态信息保存至共享内存,以提供给用户。4.根据权利要求3所述的监控方法,其特征在于,在所述按照所述第一可执行代码中的监控逻辑,实时抓取所述物理内存地址的状态信息保存至共享内存之后,还包括:触发软中断,并确定第二可执行代码的入口地址;执行所述第二可执行代码,以根据所述第二可执行代码中的监控逻辑定位内存数据故障源。5.根据权利要求2所述的监控方法,其特征在于,所述数据断点预先通过以下步骤配置于数据缓冲寄存器中:获取监控逻辑脚本、以及用户指定监控的内存地址范围和内存操作类型;将所述监控逻辑脚本转换成对应的可执行代码;将该可执行代码加载至内核地址空间中的指定内存段,并记录该可执行代码的入口地址;将所述指定监控的内存地址范围所对应的物理地址信息,以及所述内存操作类型写入数据缓冲寄存器,并在所述数据缓冲寄存器的数据结构中,添加该可执行代码的入口地址。6.根据权利要求5所述的监控方法,其特征在于,所述将所述监控逻辑脚本转换成对应的可执行代码,包括:通过虚拟解释器将所述监控逻辑脚本转换成对应的可执行代码。7.根据权利要求5所述的监控方法,其特征在于,所述内存地址范围包括以下中的一种:指定进程的内存逻辑地址范围;指定进程的内存线性地址范围;内核线性地址范围;内核逻辑地址范围;以及,内核符号。8.根据权利要求5所述的监控方法,其特征在于,所述预定类型的操作包括以下中的至少一种:内存读操作、内存写操作和内存读写操作。9.根据权利要求5所述的监控方法,其特征在于,所述监控逻辑脚本包括以下中的至少一种:踩内存监控逻辑;死锁监控逻辑;以及,系统引用计数错误监控逻辑;其中,每...
【专利技术属性】
技术研发人员:张超,
申请(专利权)人:阿里巴巴集团控股有限公司,
类型:发明
国别省市:开曼群岛,KY
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。