程序调用追踪方法、装置以及存储介质制造方法及图纸

技术编号:27849803 阅读:10 留言:0更新日期:2021-03-30 13:12
本公开提供了一种程序调用追踪方法、装置以及存储介质,涉及计算机技术领域,其中的方法包括:在源程序代码中获取织入点以及与被监控方法相对应的追踪声明信息,基于追踪声明信息生成与被监控方法相对应的追踪织入方法并织入在织入点;对织入追踪织入方法的初次编译代码进行再次编译,生成编译文件;在编译文件运行时,获生成与实例线程相对应的追踪标识号,基于追踪标识号对监控信息进行关联处理,生成调用链信息。本公开的方法、装置以及存储介质,在编译期织入追踪方法代码,风险低、效率高,可以对实例内的调用进行监控,并实现跨进程调用跟踪并生成调用链信息,能够监控整个调用链性能。用链性能。用链性能。

【技术实现步骤摘要】
程序调用追踪方法、装置以及存储介质


[0001]本公开涉及计算机
,尤其涉及一种程序调用追踪方法、装置以及存储介质。

技术介绍

[0002]随着业务系统的复杂和微服务化,很多业务系统都按照功能进行拆分,每个拆分后的业务系统通常进行分布式部署,此中情况为系统间的跨进程的调用链监控加大了复杂度。目前,现有技术中缺少对于实例内以及跨进程调用的调用链监控技术方案。

技术实现思路

[0003]有鉴于此,本专利技术要解决的一个技术问题是提供一种程序调用追踪方法、装置以及存储介质。
[0004]根据本公开的第一方面,提供一种程序调用追踪方法,包括:使用前置编译器对源程序代码进行初次编译,在所述源程序代码中获取织入点以及与被监控方法相对应的追踪声明信息;基于所述追踪声明信息生成与所述被监控方法相对应的追踪织入方法,使用织入器将所述追踪织入方法织入在所述织入点;使用后置编译器对织入所述追踪织入方法的初次编译代码进行再次编译,生成与所述源程序代码相对应的编译文件;在所述编译文件运行时,获取与所述追踪织入方法相对应的实例线程,生成与所述实例线程相对应的追踪标识号;通过所述追踪织入方法获取与所述被监控方法相对应的监控信息,基于所述追踪标识号对所述监控信息进行关联处理,生成与所述实例线程相对应的调用链信息。
[0005]可选地,所述在所述源程序代码中获取织入点以及与被监控方法相对应的追踪声明信息包括:如果判断在所述源程序代码中有追踪声明标识,则确定添加有所述追踪声明标识的被监控方法,将此被监控方法所在的位置确定为所述织入点,并基于所述追踪声明标识提取与被监控方法相对应的追踪声明信息。
[0006]可选地,所述使用织入器将所述追踪织入方法织入在所述织入点包括:基于所述追踪声明信息生成注解信息;其中,所述注解信息包括:应用名称、关键字、调用类型、调用链节点Id;生成与所述追踪织入方法相对应的通知织入代码;其中,所述通知织入代码包含所述注解信息;使用所述织入器将所述通知织入代码织入在所述织入点;其中,所述通知织入代码包括:与基于面向切面编程AOP机制的通知方法相对应的代码;所述通知方法包括:after、around、before和afterThrow方法中的至少一个方法。
[0007]可选地,生成用于使用执行计时器的计时代码;获取数据库实例和日志生成器实例,生成用于使用所述数据库实例和日志生成器实例的存储代码;将所述计时代码和所述存储代码织入在所述织入点。
[0008]可选地,所述在所述编译文件运行时,获取与所述追踪织入方法相对应的实例线程,生成与所述实例线程相对应的追踪标识号包括:在所述编译文件运行时,启动计时器,通过所述计时器追踪所述通知方法以及所述被监控方法的执行时间;通过反射器获取主执
行方法并执行,生成所述实例线程;执行所述before方法,通过所述before方法对所述注解信息进行解析并生成所述追踪标识号;在所述主执行方法执行完毕时,关闭所述计时器;所述通过所述追踪织入方法获取与所述被监控方法相对应的监控信息,基于所述追踪标识号对所述监控信息进行关联处理包括:执行所述after方法,通过所述after方法并基于所述追踪标识号对所述监控信息进行关联处理。
[0009]可选地,在生成所述追踪标识号后,建立所述实例线程的线程名与所述追踪标识号之间的映射关系,使用ThreadLocal存储所述映射关系;其中,在所述实例线程内,与各个被监控方法相对应的追踪标识号都相同。
[0010]可选地,所述调用类型包括:RPC和RPC_END;在远程过程调用RPC区间的最后一个被调用方法为RPC_END类型;所述方法还包括:基于所述调用类型获取各个RPC调用区间的第一个被调用方法和最后一个被调用方法;其中,所述被调用方法为所述被监控方法;在执行所述before方法时,通过所述before方法为与被执行的所述第一个被调用方法分配RPC识别码;在执行所述after方法时,如果确定所述最后一个被调用方法被执行,则通过所述after方法并基于所述追踪标识号对同一个RPC调用区间内的所有被调用方法的RPC识别码进行统一设置。
[0011]可选地,所述基于所述追踪标识号对所述监控信息进行关联处理,获取与所述实例线程相对应的调用链信息包括:在执行所述after方法时,将与同一个RPC调用区间内的所有被调用方法相对应的监控信息存储在所述数据库或日志系统内,并基于所述追踪标识号对此监控信息填充所述RPC识别码;其中,所述监控信息包括:方法调用信息和执行时间;基于所述RPC识别码以及所述方法调用信息和所述执行时间对所述监控信息进行串联处理,生成与所述实例线程内的各个RPC调用区间相对应的调用链信息。
[0012]可选地,所述编译文件包括:JAVA的class文件;所述方法还包括:在通过Java虚拟机JVM执行所述class文件时,对所述JVM配置用于打开监控功能的运行参数。
[0013]可选地,在所述JVM启动时,通过类加载器基于环境变量加载所述JVM运行所需的资源包;在所述资源包初始化过程中,初始化虚拟机运行期管理器,通过所述虚拟机运行期管理器加载所述JVM的运行参数,通过对应的解析器对所述运行参数进行匹配解析。
[0014]可选地,在所述调用链信息生成之后,对所述调用链信息进行可视化处理并通过可视化模块进行显示。
[0015]根据本公开的第二方面,提供一种程序调用追踪装置,包括:织入信息获取模块,用于使用前置编译器对源程序代码进行初次编译,在所述源程序代码中获取织入点以及与被监控方法相对应的追踪声明信息;追踪代码织入模块,用于基于所述追踪声明信息生成与所述被监控方法相对应的追踪织入方法,使用织入器将所述追踪织入方法织入在所述织入点;编译文件生成模块,用于使用后置编译器对织入所述追踪织入方法的初次编译代码进行再次编译,生成与所述源程序代码相对应的编译文件;追踪标识生成模块,用于在所述编译文件运行时,获取与所述追踪织入方法相对应的实例线程,生成与所述实例线程相对应的追踪标识号;监控信息处理模块,用于通过所述追踪织入方法获取与所述被监控方法相对应的监控信息,基于所述追踪标识号对所述监控信息进行关联处理,生成与所述实例线程相对应的调用链信息。
[0016]可选地,所述织入信息获取模块,具体用于如果判断在所述源程序代码中有追踪
声明标识,则确定添加有所述追踪声明标识的被监控方法,将此被监控方法所在的位置确定为所述织入点,并基于所述追踪声明标识提取与被监控方法相对应的追踪声明信息。
[0017]可选地,所述追踪代码织入模块,包括:代码生成单元,用于基于所述追踪声明信息生成注解信息;其中,所述注解信息包括:应用名称、关键字、调用类型、调用链节点Id;生成与所述追踪织入方法相对应的通知织入代码;其中,所述通知织入代码包含所述注解信息;代码织入单元,用于使用所述织入器将所述通知织入代码织入在所述织入点;其中,所述通知织入代码包括:与基于面向切面编程AOP机制的通知方法相对应的代码本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种程序调用追踪方法,包括:使用前置编译器对源程序代码进行初次编译,在所述源程序代码中获取织入点以及与被监控方法相对应的追踪声明信息;基于所述追踪声明信息生成与所述被监控方法相对应的追踪织入方法,使用织入器将所述追踪织入方法织入在所述织入点;使用后置编译器对织入所述追踪织入方法的初次编译代码进行再次编译,生成与所述源程序代码相对应的编译文件;在所述编译文件运行时,获取与所述追踪织入方法相对应的实例线程,生成与所述实例线程相对应的追踪标识号;通过所述追踪织入方法获取与所述被监控方法相对应的监控信息,基于所述追踪标识号对所述监控信息进行关联处理,生成与所述实例线程相对应的调用链信息。2.如权利要求1所述的方法,所述在所述源程序代码中获取织入点以及与被监控方法相对应的追踪声明信息包括:如果判断在所述源程序代码中有追踪声明标识,则确定添加有所述追踪声明标识的被监控方法;将此被监控方法所在的位置确定为所述织入点,并基于所述追踪声明标识提取与被监控方法相对应的追踪声明信息。3.如权利要求1或2所述的方法,所述使用织入器将所述追踪织入方法织入在所述织入点包括:基于所述追踪声明信息生成注解信息;其中,所述注解信息包括:应用名称、关键字、调用类型、调用链节点Id;生成与所述追踪织入方法相对应的通知织入代码;其中,所述通知织入代码包含所述注解信息;使用所述织入器将所述通知织入代码织入在所述织入点;其中,所述通知织入代码包括:与基于面向切面编程AOP机制的通知方法相对应的代码;所述通知方法包括:after、around、before和afterThrow方法中的至少一个方法。4.如权利要求3所述的方法,还包括:生成用于使用执行计时器的计时代码;获取数据库实例和日志生成器实例,生成用于使用所述数据库实例和日志生成器实例的存储代码;将所述计时代码和所述存储代码织入在所述织入点。5.如权利要求4所述的方法,所述在所述编译文件运行时,获取与所述追踪织入方法相对应的实例线程,生成与所述实例线程相对应的追踪标识号包括:在所述编译文件运行时,启动计时器,通过所述计时器追踪所述通知方法以及所述被监控方法的执行时间;通过反射器获取主执行方法并执行,生成所述实例线程;执行所述before方法,通过所述before方法对所述注解信息进行解析并生成所述追踪标识号;在所述主执行方法执行完毕时,关闭所述计时器;
所述通过所述追踪织入方法获取与所述被监控方法相对应的监控信息,基于所述追踪标识号对所述监控信息进行关联处理包括:执行所述after方法,通过所述after方法并基于所述追踪标识号对所述监控信息进行关联处理。6.如权利要求5所述的方法,还包括:在生成所述追踪标识号后,建立所述实例线程的线程名与所述追踪标识号之间的映射关系,使用ThreadLocal存储所述映射关系;其中,在所述实例线程内,与各个被监控方法相对应的追踪标识号都相同。7.如权利要求5所示的方法,其中,所述调用类型包括:RPC和RPC_END;在远程过程调用RPC区间的最后一个被调用方法为RPC_END类型;所述方法还包括:基于所述调用类型获取各个RPC调用区间的第一个被调用方法和最后一个被调用方法;其中,所述被调用方法为所述被监控方法;在执行所述before方法时,通过所述before方法为与被执行的所述第一个被调用方法分配RPC识别码;在执行所述after方法时,如果确定所述最后一个被调用方法被执行,则通过所述after方法并基于所述追踪标识号对同一个RPC调用区间内的所有被调用方法的RPC识别码进行统一设置。8.如权利要求7所示的方法,所述基于所述追踪标识号对所述监控信息进行关联处理,获取与所述实例线程相对应的调用链信息包括:在执行所述after方法时,将与同一个RPC调用区间内的所有被调用方法相对应的监控信息存储在所述数据库或日志系统内,并基于所述追踪标识号对此监控信息填充所述RPC识别码;其中,所述监控信息包括:方法调用信息和执行时间;基于所述RPC识别码以及所述方法调用信息和所述执行时间对所述监控信息进行串联处理,生成与所述实例线程内的各个RPC调用区间相对应的调用链信息。9.如权利要求1所述的方法,所述编译文件包括:JAVA的class文件;所述方法还包括:在通过Java虚拟机JVM执行所述class文件时,对所述JVM配置用于打开监控功能的运行参数。10.如权利要求9所述的方法,还包括:在所述JVM启动时,通过类加载器基于环境变量加载所述JVM运行所需的资源包;在所述资源包初始化过程中,初始化虚拟机运行期管理器,通过所述虚拟机运行期管理器加载所述JVM的运行参数,通过对应的解析器对所述运行参数进行匹配解析。11.如权利要求1至10任一项所述的方法,还包括:在所述调用链信息生成之后,对所述调用链信息进行可视化处理并通过可视化模块进行显示。12.一种程序调用追踪装置,包括:织入信息获取模块,用于使用前置编译器对源程序代码进行初次编译,在所述源程序代码中获取织入点以及与被监控方法相对应的追踪声明信息;追踪代码织入模块,用于基于所述追踪声明信息生成与所述被监控方法相对应的追踪织入方法...

【专利技术属性】
技术研发人员:韩晓飞
申请(专利权)人:京东数字科技控股股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1