一种微服务应用的性能剖析方法、装置及设备与流程

文档序号:26752226发布日期:2021-09-25 02:51阅读:76来源:国知局
一种微服务应用的性能剖析方法、装置及设备与流程

1.本技术涉及云计算技术领域,特别涉及一种微服务应用的性能剖析方法、装置及设备。


背景技术:

2.随着微服务架构的持续演进,在企业中,基于微服务架构的应用和服务器的数量不断增加,调用关系也愈加复杂。因此对核心的微服务架构应用进行有效的性能剖析变得比较重要。
3.现有技术中主要通过两种方式对微服务架构应用进行性能剖析。第一种是通过事先在业务代码中进行日志埋点,来记录关键业务操作的执行与否和执行耗时,这种方式性能故障的出现点存在很大的不确定因素,预埋日志的位置很可能与性能问题的根因不匹配,从而会需要再次埋设日志并且重新上线系统,降低性能问题的排查效率。第二种是通过字节码增强技术对业务代码进行字节码修改来反映操作的执行耗时情况,这种方式通常需要对一个程序包下所有方法都进行代码注入,不仅会给应用带来性能损耗,而且可能会因为注入点过多导致系统崩溃,从而降低性能问题的排查效率。
4.因此,业内亟需一种可以解决上述技术问题的技术方案。


技术实现要素:

5.本说明书实施例提供了一种微服务应用的性能剖析方法、装置及设备,可以提升性能问题的排查效率,并为性能优化提供指向。
6.本说明书提供的一种微服务应用的性能剖析方法、装置及设备是包括以下方式实现的。
7.一种微服务应用的性能剖析方法,包括:根据性能剖析命令获取所述微服务应用中需要进行性能剖析的每个目标组件运行时的方法堆栈信息;其中,每个组件的每个进程中设置有性能剖析插件,所述性能剖析命令用于指示所述性能剖析插件收集并上送对应进程的方法堆栈信息;对所有目标组件运行时的方法堆栈信息进行聚合处理,获得所有目标组件的性能分析结果;其中,所述性能分析结果包括所有目标组件中满足预设条件的执行方法的统计结果;基于每个目标组件运行时的方法堆栈信息和火焰图生成逻辑,生成每个目标组件对应的火焰图;其中,所述火焰图包括所述目标组件运行过程中执行方法的信息;根据所有目标组件的性能分析结果和每个目标组件对应的火焰图,获得所述微服务应用的性能剖析结果。
8.一种微服务应用的性能剖析装置,包括:获取模块,用于根据性能剖析命令获取所述微服务应用中需要进行性能剖析的每个目标组件运行时的方法堆栈信息;其中,每个组件的每个进程中设置有性能剖析插件,所述性能剖析命令用于指示所述性能剖析插件收集并上送对应进程的方法堆栈信息;聚合模块,用于对所有目标组件运行时的方法堆栈信息进行聚合处理,获得所有目标组件的性能分析结果;其中,所述性能分析结果包括所有目标
组件中满足预设条件的执行方法的统计结果;生成模块,用于基于每个目标组件运行时的方法堆栈信息和火焰图生成逻辑,生成每个目标组件对应的火焰图;其中,所述火焰图包括所述目标组件运行过程中执行方法的信息;获得模块,用于根据所有目标组件的性能分析结果和每个目标组件对应的火焰图,获得所述微服务应用的性能剖析结果。
9.一种微服务应用的性能剖析设备,包括至少一个处理器以及存储计算机可执行指令的存储器,所述处理器执行所述指令时实现本说明书实施例中任意一个方法实施例的步骤。
10.一种计算机可读存储介质,其上存储有计算机指令,所述指令被执行时实现本说明书实施例中任意一个方法实施例的步骤。
11.本说明书提供的一种微服务应用的性能剖析方法、装置及设备。一些实施例中采用java agent技术,可以在不侵入应用代码的情况下,实时地收集应用运行的方法堆栈信息,并持续进行聚合运算,得出精确到代码行级的性能分析报告,并基于火焰图技术,以可视化的方式生动地展现出应用的性能热点,从而可以显著提升性能问题的排查效率,为应用的性能优化提供有效指向。
附图说明
12.此处所说明的附图用来提供对本说明书的进一步理解,构成本说明书的一部分,并不构成对本说明书的限定。在附图中:
13.图1是本说明书提供的一种微服务应用的性能剖析方法的一个实施例的流程示意图;
14.图2是本说明书提供的一种性能剖析命令分发器的结构示意图;
15.图3是本说明书提供的一种火焰图的简化示意图;
16.图4是本说明书提供的一种微服务应用的性能剖析装置的一个实施例的模块结构示意图;
17.图5是本说明书提供的一种微服务应用的性能剖析系统的一个实施例的模块结构示意图;
18.图6是本说明书提供的一种微服务应用的性能剖析服务器的一个实施例的硬件结构框图。
具体实施方式
19.为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书中的一部分实施例,而不是全部的实施例。基于本说明书中的一个或多个实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书实施例保护的范围。
20.下面以一个具体的应用场景为例对本说明书实施方案进行说明。具体的,图1是本说明书提供的一种微服务应用的性能剖析方法的一个实施例的流程示意图。虽然本说明书提供了如下述实施例或附图所示的方法操作步骤或装置结构,但基于常规或者无需创造性的劳动在所述方法或装置中可以包括更多或者部分合并后更少的操作步骤或模块单元。
21.本说明书提供的一种实施方案可以应用到客户端、服务器等中。所述客户端可以包括终端设备,如智能手机、平板电脑等。所述服务器可以包括单台计算机设备,也可以包括多个服务器组成的服务器集群,或者分布式系统的服务器结构等。
22.需要说明的是,下述实施例描述并不对基于本说明书的其他可扩展到的应用场景中的技术方案构成限制。具体的一种实施例如图1所示,本说明书提供的一种微服务应用的性能剖析方法的一种实施例中,所述方法可以包括以下步骤。
23.s0:根据性能剖析命令获取所述微服务应用中需要进行性能剖析的每个目标组件运行时的方法堆栈信息;其中,每个组件的每个进程中设置有性能剖析插件,所述性能剖析命令用于指示所述性能剖析插件收集并上送对应进程的方法堆栈信息。
24.其中,微服务应用采用微服务架构来搭建其核心业务系统。微服务架构就是将传统单体应用以业务类别为边界拆解为多个小型的、可以独立部署的服务进程,进程间通过轻量级的通信协议进行交互。性能剖析命令可以是用户登录用户控制台发布,也可以通过其他方式发布。例如,用户可以登录用户控制台发出性能剖析命令,从而指定对一个微服务应用的若干组件开展性能剖析。性能剖析命令中可以包括微服务应用中需要进行性能剖析的组件标识。这样,根据组件标识可以确定对微服务应用哪些组件开展性能剖析。其中,用户控制台是用户对微服务应用进行性能剖析的主界面,可以发布性能剖析命令,并观察相应组件最频繁执行方法的统计结果和执行过程的火焰图,来定位性能问题的根因,并发现可以优化的性能点。
25.性能剖析插件是以java agent代理的形式存在于应用进程中的,其提供的性能剖析逻辑与应用的业务逻辑能够同时运行。在微服务应用所有组件的每个进程中,都会安装一个性能剖析插件,用于收集该进程的方法堆栈信息。性能剖析插件采用了java agent技术,在应用的业务逻辑启动前,允许先在后台加载用于性能剖析服务的若干线程,其可以在业务逻辑运行时持续存在。一些实施场景中,性能剖析插件是以一个独立jar包的形式部署的,它可以与应用程序的jar包相互分离。通过在应用程序的java启动命令中添加

javaagent:xxx.jar选项(其中,xxx.jar表示性能剖析插件的路径)就能触发性能剖析逻辑的运行。
26.一些实施场景中,所述根据性能剖析命令获取所述微服务应用中需要进行性能剖析的每个目标组件运行时的方法堆栈信息前,可以包括:接收性能剖析命令;将所述性能剖析命令存储至性能剖析命令分发器;其中,所述性能剖析命令分发器至少包括负载均衡单元、命令读写单元、命令存储数据库;所述负载均衡单元用于将性能剖析插件所发出的访问请求发送至所述命令读写单元;所述命令读写单元用于将性能剖析命令存储到命令数据库中,并读取性能剖析命令返回给性能剖析插件;所述命令存储数据库用于保存性能剖析命令。其中,性能剖析命令分发器可以用于存储和分发用户最新发布的性能剖析命令,是用户控制台与性能剖析插件之间的关键衔接装置。
27.一些实施场景中,用户发出的性能剖析命令后,可以先经由性能剖析命令分发器进行内部存储。
28.为了更好地对性能剖析命令分发器的工作过程进行了解,下面结合附图2对所述性能剖析命令分发器的结构示意图进行介绍。如图2所示,所述性能剖析命令分发器可以包括负载均衡单元201、命令读写单元202和命令存储数据库203。其中,命令存储数据库203可
以用于保存用户最新发布的性能剖析命令,通过预设配置规则,可以实现对不同范围粒度内的应用进程进行性能剖析,适应性能排查过程中的各类场景需求。
29.具体的,所述命令存储数据库203内可以维护有一张性能剖析命令表,所述性能剖析命令表可以包含有应用名、组件名、实例号、类与方法黑名单这四个字段,其中,前三个字段用于表示从高到低的层级关系,通过对这些字段的字段值进行设置可以调整性能剖析命令的作用范围。
30.例如,实际应用中可以通过将字段值设置为“*”和非*,来调整相应的作用范围。相应的,可以具有以下四种不同的配置方式:
31.(1)若应用名、组件名、实例号均为非*:表示对某个微服务应用中某个组件下的特定进程进行性能剖析,命令作用的粒度最小。如:“应用a,组件c,12”表示仅对应用a中组件c下实例号为12的那个进程进行性能剖析。
32.(2)若应用名、组件名为非*,实例号为*:表示对某个微服务应用中某个组件下的所有进程进行性能剖析。如:“应用a,组件c,*”表示对应用a中组件c下的所有进程进行性能剖析。
33.(3)若应用名为非*,组件名、实例号均为*:表示对某个微服务应用中的所有进程进行性能剖析。如:“应用a,*,*”表示对应用a中的所有进程进行性能剖析。
34.(4)若应用名、组件名、实例号均为*:表示对接入平台的所有应用进程进行性能剖析,命令的作用粒度最大。如:“*,*,*”。
35.实际应用中每个进程都可以具有相应的应用名、组件名和实例号序列来进行相互区分,每个性能剖析插件可以获取与其所属进程匹配的所有性能剖析命令。如:对于“应用a,组件c,12”标识的进程,上述示例(1)

(4)中的4条性能剖析命令均与其匹配。
36.所述命令读写单元202可以用于将用户发布的性能剖析命令存储到命令数据库中,并读取性能剖析命令返回给各性能剖析插件。一些实施场景中,为了应对大量性能剖析插件的频繁访问请求,可以采取横向扩展的方式,将多个命令读写单元202挂载到负载均衡单元201下,实现相应的对外服务。
37.所述负载均衡单元201可以用于基于各个命令读写单元202的负载,将性能剖析插件所发出的访问请求均匀地分发至各个命令读写单元202进行处理,从而避免单个命令读写单元202存在较大的负载。
38.一些实施场景中,将用户发出的性能剖析命令经由性能剖析命令分发器进行内部存储后,可以传递给微服务应用中目标组件中的每个性能剖析插件。其中,目标组件可以指微服务应用中需要进行性能剖析的组件。
39.一些实施场景中,性能剖析插件可以定期从性能剖析命令分发器获取当前需要剖析的组件集合,若其所在组件属于该集合,则表示需要对该进程进行性能剖析,之后,性能剖析插件可以收集进程运行时的方法堆栈信息。
40.一些实施场景中,所述性能剖析插件收集对应进程的方法堆栈信息,可以包括:获取并解析目标进程对应的性能剖析命令,确定需要过滤的类与方法的黑名单;基于确定的类与方法的黑名单,获取所述目标进程当前所有线程的方法堆栈快照信息;将每个方法堆栈快照信息处理为行信息,获得每个方法堆栈信息。其中,所述方法堆栈信息可以用于表示对应进程的运行情况。一些实施场景中,所述方法堆栈信息至少可以包括线程名、线程状态
信息和方法列表。具体的,每个线程的方法堆栈可以由线程名、线程若干状态和一系列层叠的方法列表组成。其中,方法列表可以展现该线程的方法运行的详细轨迹,能够精确到具体类名、方法名和代码行号,包括应用业务方法调用、底层jdk(java development kit)方法调用和第三方框架调用的信息。方法列表还可以表现方法间的调用关系,最底层方法是调用链路的源头,最顶层方法是调用链路的末端。通过分析一个进程当前执行的所有线程的方法堆栈快照,可以得出反映该进程运行情况的有用信息。
41.例如一些实施场景中,性能剖析插件可以定期访问性能剖析命令分发器,获取与其所属进程匹配的所有性能剖析命令,然后判断是否需要性能剖析,若该进程属于需要性能剖析的组件集合,则开始运行性能剖析逻辑。进一步,可以解析获取的多条性能剖析命令,并将这些命令中的所有类与方法的黑名单合并为一个列表,然后可以通过jdk的管理接口threadmxbean获取所属进程当前所有线程的方法堆栈快照信息。进一步,为了方便流式计算引擎进行分析处理,也便于基于行进行搜索、截取和存储,可以将每个方法堆栈快照信息折叠为一行,获得每个方法堆栈信息。其中,流式计算引擎可以从分布式消息队列中连续地获取数据(即“流式读取”),并运行批量(如分钟级批量、秒级批量等)来计算一个微服务应用中所有目标组件在预设时间内(如上一分钟内、前三分钟内等)最频繁执行方法的统计结果,并存储到性能分析结果数据库中。性能分析结果数据库可以用于存储一个微服务应用中所有目标组件运行性能的指标(如分钟级指标),即在预设时间内(如一分钟内、三分钟内)最频繁执行方法(如top20执行方法、top5执行方法等)的统计结果,其可以使用分布式数据库来实现。
42.一些实施场景中,所述性能剖析插件收集对应进程的方法堆栈信息后,还可以包括:将目标进程的状态信息和每个方法堆栈信息进行组装,获得json形式的方法堆栈信息;将所述json形式的方法堆栈信息存储到内存队列中。
43.例如一些实施场景中,在完成性能剖析逻辑的所有操作后,可以将所属进程的所有状态信息和每个方法堆栈信息组成一个json形式的变量,再存储到内存中的一个队列中,用于实现收集与上送方法堆栈信息这两个过程的解耦。其中,目标进程的状态信息可以包括应用名、组件名、实例号、时间戳、机器名等。json(javascript object notation,js对象简谱)是一种轻量级的数据交换格式。
44.一些实施场景中,在每次收集完方法堆栈信息后,可以等待预设时间,如0.1秒,这样可以保证以该频率收集方法堆栈信息对于应用进程性能的影响在可以接受的范围内,同时又尽可能完整地获取了进程执行的轨迹。
45.一些实施场景中,性能剖析插件收集进程运行时的方法堆栈信息后,还可以异步上送到分布式消息队列。其中,分布式消息队列具有分布式部署、多分区、多副本、顺序读写等特点,可以实现对各性能剖析插件上送的海量方法堆栈信息的高速可靠存储,并供数给下游的流式计算引擎进行处理。
46.一些实施场景中,所述将所述json形式的方法堆栈信息存储到内存队列中后,还可以包括:从所述内存队列中取出预设数量的json形式的方法堆栈信息;对预设数量的json形式的方法堆栈信息进行序列化转换,获得序列化的json数据;将所述序列化的json数据批量上送到分布式消息队列。
47.一些实施场景中,为了实现高效上送方法堆栈信息,可以从内存队列中一次性地
取出n条json形式的方法堆栈信息,然后对这n条json形式的方法堆栈信息进行序列化转换,最后将序列化后的n条json形式的方法堆栈信息以批量形式一次性地上送到分布式消息队列中,从而提升数据上送的效率。
48.一些实施场景中,所述将所述序列化的json数据批量上送到分布式消息队列后,还可以包括:在所述内存队列中不包括json形式的方法堆栈信息的情况下,等待预设时间后,从所述内存队列中取出预设数量的json形式的方法堆栈信息;相应的,对预设数量的json形式的方法堆栈信息进行序列化转换,获得序列化的json数据;将所述序列化的json数据批量上送到分布式消息队列。
49.一些实施场景中,在将序列化的json数据批量上送到分布式消息队列后,可以判断内存队列中是否还有json形式的方法堆栈信息,若有,则可以继续从内存队列中一次性地取出n条json形式的方法堆栈信息,然后对这n条json形式的方法堆栈信息进行序列化转换,最后将序列化后的n条json形式的方法堆栈信息以批量形式一次性地上送到分布式消息队列中。一些实施场景中,在将序列化的json数据批量上送到分布式消息队列后,确定内存队列中没有json形式的方法堆栈信息,则可以等待预设时间,如1秒后,再从内存队列中一次性地取出n条json形式的方法堆栈信息,然后对这n条json形式的方法堆栈信息进行序列化转换,最后将序列化后的n条json形式的方法堆栈信息以批量形式一次性地上送到分布式消息队列中。
50.本说明书实施例中,通过根据性能剖析命令获取微服务应用中需要进行性能剖析的每个目标组件运行时的方法堆栈信息,可以为后续获得微服务应用的性能剖析结果提供基础。
51.本说明书实施例,通过性能剖析可以在应用系统发生性能故障时快速定位问题原因,保障业务的平稳运行。同时,还可以发现应用系统的性能热点,为性能优化提供方向,提升系统运行效率,减少企业运营成本。此外,在版本重大更新后,还可以对比更新前后的性能状况,防止版本更新引入额外的性能隐患。
52.s2:对所有目标组件运行时的方法堆栈信息进行聚合处理,获得所有目标组件的性能分析结果;其中,所述性能分析结果包括所有目标组件中满足预设条件的执行方法的统计结果。
53.本说明书实施例中,在获取每个目标组件运行时的方法堆栈信息后,可以对所有目标组件运行时的方法堆栈信息进行聚合处理,获得所有目标组件的性能分析结果。其中,性能分析结果可以包括所有目标组件中满足预设条件的执行方法的统计结果。预设条件可以包括预设时间内所有目标组件中最频繁执行方法的统计结果。预设时间可以根据实际场景设定,本说明书对此不做限定。例如,预设条件可以是上一分钟内所有目标组件中最频繁执行方法的统计结果。执行方法也可以称为方法。
54.一些实施场景中,所述对所有目标组件运行时的方法堆栈信息进行聚合处理,获得所有目标组件的性能分析结果,可以包括:从分布式消息队列中获取预设时间内所有目标组件运行时的方法堆栈信息;基于预设时间内所有目标组件运行时的方法堆栈信息,运行定时批量运算逻辑,获得所有目标组件的性能分析结果。其中,预设时间可以根据实际场景设定,例如可以是一分钟、两分钟等,本说明书对此不作限定。
55.一些实施场景中,用户发布性能剖析命令后,可以在流式计算引擎中定制定时批
量的运算逻辑。其中,定时批量的运算逻辑可以每固定时间(如每分钟)执行一次。具体的,定时批量的运算逻辑可以从分布式消息队列中源源不断地获取固定时间(如上一分钟)内的数据,并执行聚合计算,得出该固定时间(如上一分钟)内所有目标组件中最频繁执行方法的统计结果,最后会存储到性能分析结果数据库中。
56.s4:基于每个目标组件运行时的方法堆栈信息和火焰图生成逻辑,生成每个目标组件对应的火焰图;其中,所述火焰图包括所述目标组件运行过程中执行方法的信息。
57.本说明书实施例中,在获得所有目标组件的性能分析结果后,可以基于每个目标组件运行时的方法堆栈信息和火焰图生成逻辑,生成每个目标组件对应的火焰图。其中,所述火焰图可以包括目标组件运行过程中执行方法的信息。火焰图是由brendan gregg发明的一种对方法堆栈进行可视化展现的工具。在火焰图中,每一个方格可以表示一个方法,方格的长度可以表示方法的执行时长,即方格越长说明该方法执行时间越长。和方法堆栈信息对应,火焰图中的下层方格与上层方格的关系是下层方格对应的方法调用上层方格对应的方法,最底层方格对应的方法是一个线程执行轨迹的源头,最顶层方格对应的方法是该线程执行轨迹的末端。因此,火焰图能够体现一个组件执行过程中的具体调用关系和存在的热点,即最顶层最长的方格所对应的方法就是占用cpu时间最长的方法,表示某种性能问题的根因和需要优先进行调优的位置。如图3所示,图3是本说明书提供的一种火焰图的简化示意图,其中,包括方法a()、b()、c()、d()、e()、f()、g()、h(),方法f()是占用cpu时间最长的方法,需要用户重点关注。
58.一些实施场景中,用户发布性能剖析命令后,可以在可视化生成引擎中定制火焰图的生成批量逻辑。其中,火焰图的生成批量逻辑会拉取所有符合条件的方法堆栈信息,进行内容过滤后输入可视化生成引擎生成火焰图。可视化生成引擎可以用于聚合指定时间范围内目标组件方法堆栈信息来生成火焰图,进而展现目标组件运行过程中的所有热点方法。
59.一些实施场景中,所述基于每个目标组件运行时的方法堆栈信息和火焰图生成逻辑,生成每个目标组件对应的火焰图,可以包括:接收并解析火焰图生成命令,获得火焰图信息;所述火焰图信息包括对应的应用名、组件名和时间范围;根据所述火焰图信息筛选出目标组件在所述时间范围的方法堆栈信息;解析每个方法堆栈信息,删除每个方法堆栈信息中的框架调用信息,获得每个方法堆栈信息对应的临时文件;基于所有方法堆栈信息对应的临时文件,调用火焰图生成脚本工具,生成每个目标组件对应的火焰图;其中,所述火焰图生成脚本工具包括火焰图生成逻辑。
60.一些实施场景中,接收到火焰图生成命令后,可以将火焰图生成命令转发到可视化生成引擎处理。一些实施场景中,可视化生成引擎收到火焰图生成命令后,可以对命令进行解析,得到火焰图信息。其中,火焰图信息可以包括对应的目标应用名、组件名和时间范围。
61.一些实施场景中,在获得火焰图信息后,可以根据从命令中解析出的目标应用名、组件名和时间范围,到组件方法堆栈存储库中获取特定时间段内的方法堆栈的所有原始数据文件,并拉取到本地待后续处理。其中,组件方法堆栈存储库可以用于存储一个微服务应用中所有目标组件运行时方法堆栈的原始数据(即方法堆栈信息),并按照应用名、组件名、时间范围(如分钟)分不同目录和文件进行存储,具体可以使用分布式文件系统来实现。
62.由于每行数据是经过折叠的一个完整方法堆栈,根据应用的特点,在方法堆栈中可能会存在大量的第三方框架调用的重复信息,所以一些实施场景中,可以按行读取每个数据文件的内容,然后按要求过滤掉每行方法堆栈中涉及的特定框架调用部分,得到一个对应的临时文件。这样,通过去掉方法堆栈中存在的第三方框架调用的重复信息,可以让火焰图中的各方法堆栈间显得更加集中,从而更清晰地看出性能问题和待优化点。
63.一些实施场景中,在获得每个方法堆栈信息对应的临时文件后,可以将所有临时文件作为火焰图生成脚本的数据参数,调用火焰图生成脚本工具,得到一个svg格式的图片文件。其中,所述svg格式的图片文件可以表示目标组件对应的火焰图。svg格式的图片文件是一种可交互类型的文件,可在文件右上方的搜索框中输入包名、方法名进行检索,当滑动鼠标到指定方格上时可以显示对应的完整类名和方法名。
64.s6:根据所有目标组件的性能分析结果和每个目标组件对应的火焰图,获得所述微服务应用的性能剖析结果。
65.本说明书实施例中,在生成每个目标组件对应的火焰图后,可以根据所有目标组件的性能分析结果和每个目标组件对应的火焰图,获得微服务应用的性能剖析结果。
66.一些实施场景中,在生成每个目标组件对应的火焰图后,可以将所有目标组件的性能分析结果和每个目标组件对应的火焰图返回给用户控制台供用户进行热点分析。
67.一些实施场景中,将性能分析结果和火焰图返回给用户控制台后,可以在用户控制台上展示反映所有目标组件中最频繁执行方法的统计结果和火焰图,进而可以根据展示结果得出对应组件将cpu时间花在哪些方法上的有用信息(即获得微服务应用的性能剖析结果),从而帮助定位性能问题的根因,并提供有价值的性能优化点。
68.本说明书实施例中,在用户控制台上展示对应组件的火焰图后,可以通过比较图中各方块的长度,直观快速地确定是否有明显长时间占用cpu的方法存在,进而方便发现潜在的性能热点,为性能故障排查和性能调优提供依据和指向。
69.本说明书实施例中,在发出性能剖析命令后,经过方法堆栈信息收集、数据上送和聚合计算等一系列流程,可以在预设时间后就在用户控制台上展示反映所有目标组件中最频繁执行方法的统计分析报告和火焰图,从而直观快速的确定对应组件将cpu时间花在哪些方法上的有用信息,帮助定位性能问题的根因,并提供有价值的性能优化点。
70.本说明书实施例中,可以在应用不停机的情况下,通过定期观察应用方法堆栈的详情来确定性能故障根因和热点,从而可以提升性能问题的排查效率,为性能优化提供指向。此外,本技术方法对应用自身带来的性能损耗极小,且在剖析结束后可以完全消除,不会对应用带来负面影响。
71.当然,上述只是进行示例性说明,本说明书实施例不限于上述举例,所属领域技术人员在本技术技术精髓的启示下,还可能做出其它变更,但只要其实现的功能和效果与本技术相同或相似,均应涵盖于本技术保护范围内。
72.从以上的描述中,可以看出,本技术实施例采用java agent技术,可以在不侵入应用代码的情况下,实时地收集应用运行的方法堆栈信息,并持续进行聚合运算,得出精确到代码行级的性能分析报告,并基于火焰图技术,以可视化的方式生动地展现出应用的性能热点,从而可以显著提升性能问题的排查效率,为应用的性能优化提供有效指向。
73.本说明书中上述方法的各个实施例均采用递进的方式描述,各个实施例之间相同
相似的部分互相参照即可,每个实施例重点说明的都是与其他实施例的不同之处。相关之处参见方法实施例的部分说明即可。
74.基于上述所述一种微服务应用的性能剖析方法,本说明书一个或多个实施例还提供一种微服务应用的性能剖析装置。所述的装置可以包括使用了本说明书实施例所述方法的系统(包括分布式系统)、软件(应用)、模块、组件、服务器、客户端等并结合必要的实施硬件的装置。基于同一创新构思,本说明书实施例提供的一个或多个实施例中的装置如下面的实施例所述。由于装置解决问题的实现方案与方法相似,因此本说明书实施例具体的装置的实施可以参见前述方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
75.具体地,图4是本说明书提供的一种微服务应用的性能剖析装置的一个实施例的模块结构示意图,如图4所示,本说明书提供的一种微服务应用的性能剖析装置可以包括:获取模块120,聚合模块122,生成模块124,获得模块126。
76.获取模块120,可以用于根据性能剖析命令获取所述微服务应用中需要进行性能剖析的每个目标组件运行时的方法堆栈信息;其中,每个组件的每个进程中设置有性能剖析插件,所述性能剖析命令用于指示所述性能剖析插件收集并上送对应进程的方法堆栈信息;
77.聚合模块122,可以用于对所有目标组件运行时的方法堆栈信息进行聚合处理,获得所有目标组件的性能分析结果;其中,所述性能分析结果包括所有目标组件中满足预设条件的执行方法的统计结果;
78.生成模块124,可以用于基于每个目标组件运行时的方法堆栈信息和火焰图生成逻辑,生成每个目标组件对应的火焰图;其中,所述火焰图包括所述目标组件运行过程中执行方法的信息;
79.获得模块126,可以用于根据所有目标组件的性能分析结果和每个目标组件对应的火焰图,获得所述微服务应用的性能剖析结果。
80.需要说明的,上述所述的装置根据方法实施例的描述还可以包括其他的实施方式,具体的实现方式可以参照相关方法实施例的描述,在此不作一一赘述。
81.基于上述所述一种微服务应用的性能剖析方法,本说明书一个或多个实施例还提供一种微服务应用的性能剖析系统。如图5所示,所述微服务应用的性能剖析系统可以包括性能剖析插件501、分布式消息队列502、流式计算引擎503、性能分析结果数据库504、组件方法堆栈存储库505、可视化生成引擎506、用户控制台507、性能剖析命令分发器508。
82.其中,性能剖析插件501是以java agent代理的形式存在于应用进程中(如应用a进程实例1、应用a进程实例2、
……
、应用a进程实例n),其提供的性能剖析逻辑与应用的业务逻辑能够同时运行。性能剖析插件501可以定期从性能剖析命令分发器508获取当前需要剖析的组件集合,若其所在组件属于该集合,则表示需要对该进程进行性能剖析,之后,性能剖析插件501会收集进程运行时的方法堆栈信息,并异步上送到分布式消息队列502。
83.分布式消息队列502具有分布式部署、多分区、多副本、顺序读写等特点,可以实现对各性能剖析插件501上送的海量方法堆栈信息的高速可靠存储,并供数给下游的流式计算引擎503进行处理。
84.流式计算引擎503可以从分布式消息队列502中连续地获取数据(即“流式读取”),并运行批量来计算一个微服务应用中所有目标组件在预设时间内最频繁执行方法的统计结果,并存储到性能分析结果数据库504中。
85.性能分析结果数据库504可以用于存储一个微服务应用中所有目标组件运行性能的指标,即在预设时间内最频繁执行方法的统计结果,其可以使用分布式数据库来实现。
86.组件方法堆栈存储库505可以用于存储一个微服务应用中所有目标组件运行时方法堆栈的原始数据(即方法堆栈信息),并按照应用名、组件名、时间范围(如分钟)分不同目录和文件进行存储,具体可以使用分布式文件系统来实现。
87.可视化生成引擎506可以用于聚合指定时间范围内目标组件方法堆栈信息来生成火焰图,进而展现目标组件运行过程中的所有热点方法。
88.用户控制台507是用户对微服务应用进行性能剖析的主界面,可以发布性能剖析命令,并观察相应组件最频繁执行方法的统计结果和执行过程的火焰图,来定位性能问题的根因,并发现可以优化的性能点。
89.性能剖析命令分发器508可以用于存储和分发用户最新发布的性能剖析命令,是用户控制台507与性能剖析插件501之间的关键衔接装置。
90.需要说明的,上述所述的系统根据方法实施例的描述还可以包括其他的实施方式,具体的实现方式可以参照相关方法实施例的描述,在此不作一一赘述。
91.本说明书还提供一种微服务应用的性能剖析设备的实施例,包括处理器及用于存储处理器可执行指令的存储器,所述指令被所述处理器执行时实现包括以下步骤:根据性能剖析命令获取所述微服务应用中需要进行性能剖析的每个目标组件运行时的方法堆栈信息;其中,每个组件的每个进程中设置有性能剖析插件,所述性能剖析命令用于指示所述性能剖析插件收集并上送对应进程的方法堆栈信息;对所有目标组件运行时的方法堆栈信息进行聚合处理,获得所有目标组件的性能分析结果;其中,所述性能分析结果包括所有目标组件中满足预设条件的执行方法的统计结果;基于每个目标组件运行时的方法堆栈信息和火焰图生成逻辑,生成每个目标组件对应的火焰图;其中,所述火焰图包括所述目标组件运行过程中执行方法的信息;根据所有目标组件的性能分析结果和每个目标组件对应的火焰图,获得所述微服务应用的性能剖析结果。
92.需要说明的,上述所述的设备根据方法或装置实施例的描述还可以包括其他的实施方式。具体的实现方式可以参照相关方法实施例的描述,在此不作一一赘述。
93.本说明书所提供的方法实施例可以在移动终端、计算机终端、服务器或者类似的运算装置中执行。以运行在服务器上为例,图6是本说明书提供的一种微服务应用的性能剖析服务器的一个实施例的硬件结构框图,该服务器可以是上述实施例中的微服务应用的性能剖析装置或微服务应用的性能剖析设备。如图6所示,服务器10可以包括一个或多个(图中仅示出一个)处理器100(处理器100可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)、用于存储数据的存储器200、以及用于通信功能的传输模块300。本领域普通技术人员可以理解,图6所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,服务器10还可包括比图6中所示更多或者更少的组件,例如还可以包括其他的处理硬件,如数据库或多级缓存、gpu,或者具有与图6所示不同的配置。
94.存储器200可用于存储应用软件的软件程序以及模块,如本说明书实施例中的微
服务应用的性能剖析方法对应的程序指令/模块,处理器100通过运行存储在存储器200内的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器200可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器200可进一步包括相对于处理器100远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
95.传输模块300用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端的通信供应商提供的无线网络。在一个实例中,传输模块300包括一个网络适配器(network interface controller,nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输模块300可以为射频(radio frequency,rf)模块,其用于通过无线方式与互联网进行通讯。
96.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
97.本说明书提供的上述实施例所述的方法或装置可以通过计算机程序实现业务逻辑并记录在存储介质上,所述的存储介质可以计算机读取并执行,实现本说明书实施例所描述方案的效果。所述存储介质可以包括用于存储信息的物理装置,通常是将信息数字化后再以利用电、磁或者光学等方式的媒体加以存储。所述存储介质可以包括:利用电能方式存储信息的装置如,各式存储器,如ram、rom等;利用磁能方式存储信息的装置如,硬盘、软盘、磁带、磁芯存储器、磁泡存储器、u盘;利用光学方式存储信息的装置如,cd或dvd。当然,还有其他方式的可读存储介质,例如量子存储器、石墨烯存储器等等。
98.本说明书提供的上述微服务应用的性能剖析方法或装置实施例可以在计算机中由处理器执行相应的程序指令来实现,如使用windows操作系统的c++语言在pc端实现、linux系统实现,或其他例如使用android、ios系统程序设计语言在智能终端实现,以及基于量子计算机的处理逻辑实现等。
99.需要说明的是说明书上述所述的装置、设备、系统根据相关方法实施例的描述还可以包括其他的实施方式,具体的实现方式可以参照对应方法实施例的描述,在此不作一一赘述。
100.本技术中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参照即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于硬件+程序类实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
101.为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个时可以把部分模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。
102.本发明是参照根据本发明实施例的方法、装置、设备、系统的流程图和/或方框图来描述的。应理解可由计算机程序指令实现,可提供这些计算机程序指令到通用计算机、专
用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
103.本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。
104.以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1