随着微服务体系在生产环境落地,也会伴随着一些问题呈现,比如流量过大造成某个微服务运用程序的功能瓶颈、CPU利用率高、或内存泄漏等问题。要找到问题的根本原因,咱们通常都会经过日志、进程再结合代码去判别根本原因。关于微服务巨大的业务,这必定会很耗时,而且也很难及时找到关键问题点。

本文将介绍一个 持续功能剖析渠道 Pyroscope,它能够协助咱们快速找到内存泄漏、CPU利用率高的代码。

什么是 Pyroscope?

Pyroscope 是一个开源的持续功能剖析渠道。它能够帮你:

  • 查找代码中的功能问题
  • 处理 CPU 利用率高的问题
  • 定位并修复内存泄漏
  • 了解运用程序的调用树
  • 跟踪随时刻的变化

Pyroscope 能够存储来自多个运用程序长时刻的剖析数据;能够一次检查多年的数据或独自检查特定的事件;较低的 CPU 运用;数据压缩效率高,磁盘空间要求低;方便的 UI 界面;

Pyroscope 架构

Pyroscope 由两个主要组件支撑运行:Pyroscope ServerPyroscope Agent

Pyroscope Agent:记录并汇总您的运用程序一直在履行的操作,然后将该数据发送到 Pyroscope Server。支撑多种语言,GO、Python、Ruby、eBPF、JAVA、Rust、PHP、NodeJS、.NET

Pyroscope Server: 处理、聚合和存储来自代理的数据,以便在任何时刻范围内快速查询。片刻后能够检查剖析数据,并在任何时刻范围内进行查询。

微服务性能分析|Pyroscope 在 Rainbond 上的实践分享

与 Rainbond 集成架构

微服务性能分析|Pyroscope 在 Rainbond 上的实践分享

1.集成 Pyroscope Agent:

运用 Rainbond 插件的机制在微服务组件内装置 Pyroscope Agent 插件,该插件会将 pyroscope.jar 经过 javaagent 方式发动 java -javaagent:pyroscope.jar -jar app.jar

2.依靠 Pyroscope Server:

将装置了 Pyroscope Agent 插件微服务组件都依靠至 Pyroscope Server。

实践过程

本文将根据微服务框架 Pig 进行实践,过程为:

  1. 布置微服务 Spring Cloud Pig,Gitee:gitee.com/log4j/pig
  2. 布置 Pyroscope Server
  3. 装置 Pyroscope Java Agent 插件并装备
  4. 树立微服务与 Pyroscope 之间的依靠联系
  5. Pyroscope 基本运用

Rainbond 布置请参阅文档 快速装置

1. 布置微服务 Spring Cloud Pig

经过开源运用商铺一键装置 Spring Cloud Pig,新增 -> 根据运用商铺创立组件 -> 在开源运用商铺中查找 SpringCloud-Pig 并装置到指定运用中。

微服务性能分析|Pyroscope 在 Rainbond 上的实践分享

2. 布置 Pyroscope Server

经过开源运用商铺一键装置Pyroscope Server,新增 -> 根据运用商铺创立组件 -> 在开源运用商铺中查找 Pyroscope 并装置到指定运用中。

微服务性能分析|Pyroscope 在 Rainbond 上的实践分享

3. 装置 Pyroscope Java Agent 插件并装备

  1. 插件 -> 从运用商铺装置插件,查找 Pyroscope-Java-Agent 进行装置。

微服务性能分析|Pyroscope 在 Rainbond 上的实践分享

  1. 为每个微服务组件都注册插件,进入微服务组件 -> 插件 -> 注册插件 Pyroscope-Java-Agent 并更新组件。

微服务性能分析|Pyroscope 在 Rainbond 上的实践分享

  1. 为每个微服务组件都设置以下环境变量,可在组件内 -> 环境变量 -> 增加变量。也能够经过运用装备组为一切组件一致装备 JAVA_OPTS 环境变量,而 PYROSCOPE_APPLICATION_NAME 环境变量是唯一的,不可一致装备。
变量名 变量值 说明
JAVA_OPTS -javaagent:/agent/pyroscope.jar Java agent 发动参数
PYROSCOPE_APPLICATION_NAME pig.auth 微服务模块名称

微服务性能分析|Pyroscope 在 Rainbond 上的实践分享

4. 树立微服务与Pyroscope之间的依靠联系

将一切微服务组件增加依靠连接到 Pyroscope,切换到编排模式进行依靠联系树立,并更新或重启一切微服务组件使依靠联系收效。

微服务性能分析|Pyroscope 在 Rainbond 上的实践分享

5. Pyroscope 基本运用

拜访 Pyroscope 的 4040 对外服务端口,即可拜访 Pyroscope UI。

在 Single View 视图中,能够经过 Application 挑选服务。它能够显现某一段时刻内的火焰图,也能够运用表格展现或者一起展现,火焰图能够看到微服务办法调用的功能指标。

微服务性能分析|Pyroscope 在 Rainbond 上的实践分享

在 Comparison View 视图中,能够挑选不同的时刻段进行比较,经过时刻线拖拽即可。

微服务性能分析|Pyroscope 在 Rainbond 上的实践分享

在 Diff View 视图中,能够进行两个时刻段的差异比对,这通常在排查微服务的CPU、内存泄漏时很有效。

微服务性能分析|Pyroscope 在 Rainbond 上的实践分享

最终

Pyroscope 还能够结合 Jaeger 一起运用,能够集成在 Jaeger UI 中,可参阅 Jaeger UI 集成


Rainbond 是一个云原生运用办理渠道,核心100%开源、运用简单、不需要懂容器和Kubernetes,支撑办理多种Kubernetes集群,供给企业级运用的全生命周期办理。