随着微服务体系在生产环境落地,也会伴随着一些问题呈现,比如流量过大造成某个微服务运用程序的功能瓶颈、CPU利用率高、或内存泄漏等问题。要找到问题的根本原因,咱们通常都会经过日志、进程再结合代码去判别根本原因。关于微服务巨大的业务,这必定会很耗时,而且也很难及时找到关键问题点。
本文将介绍一个 持续功能剖析渠道 Pyroscope,它能够协助咱们快速找到内存泄漏、CPU利用率高的代码。
什么是 Pyroscope?
Pyroscope 是一个开源的持续功能剖析渠道。它能够帮你:
- 查找代码中的功能问题
- 处理 CPU 利用率高的问题
- 定位并修复内存泄漏
- 了解运用程序的调用树
- 跟踪随时刻的变化
Pyroscope 能够存储来自多个运用程序长时刻的剖析数据;能够一次检查多年的数据或独自检查特定的事件;较低的 CPU 运用;数据压缩效率高,磁盘空间要求低;方便的 UI 界面;
Pyroscope 架构
Pyroscope 由两个主要组件支撑运行:Pyroscope Server 和 Pyroscope Agent。
Pyroscope Agent:记录并汇总您的运用程序一直在履行的操作,然后将该数据发送到 Pyroscope Server。支撑多种语言,GO、Python、Ruby、eBPF、JAVA、Rust、PHP、NodeJS、.NET
Pyroscope Server: 处理、聚合和存储来自代理的数据,以便在任何时刻范围内快速查询。片刻后能够检查剖析数据,并在任何时刻范围内进行查询。
与 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 进行实践,过程为:
- 布置微服务 Spring Cloud Pig,Gitee:gitee.com/log4j/pig
- 布置 Pyroscope Server
- 装置 Pyroscope Java Agent 插件并装备
- 树立微服务与 Pyroscope 之间的依靠联系
- Pyroscope 基本运用
Rainbond 布置请参阅文档 快速装置
1. 布置微服务 Spring Cloud Pig
经过开源运用商铺一键装置 Spring Cloud Pig,新增 -> 根据运用商铺创立组件 -> 在开源运用商铺中查找 SpringCloud-Pig
并装置到指定运用中。
2. 布置 Pyroscope Server
经过开源运用商铺一键装置Pyroscope Server,新增 -> 根据运用商铺创立组件 -> 在开源运用商铺中查找 Pyroscope
并装置到指定运用中。
3. 装置 Pyroscope Java Agent 插件并装备
- 插件 -> 从运用商铺装置插件,查找
Pyroscope-Java-Agent
进行装置。
- 为每个微服务组件都注册插件,进入微服务组件 -> 插件 -> 注册插件
Pyroscope-Java-Agent
并更新组件。
- 为每个微服务组件都设置以下环境变量,可在组件内 -> 环境变量 -> 增加变量。也能够经过运用装备组为一切组件一致装备
JAVA_OPTS
环境变量,而PYROSCOPE_APPLICATION_NAME
环境变量是唯一的,不可一致装备。
变量名 | 变量值 | 说明 |
---|---|---|
JAVA_OPTS | -javaagent:/agent/pyroscope.jar | Java agent 发动参数 |
PYROSCOPE_APPLICATION_NAME | pig.auth | 微服务模块名称 |
4. 树立微服务与Pyroscope之间的依靠联系
将一切微服务组件增加依靠连接到 Pyroscope,切换到编排模式进行依靠联系树立,并更新或重启一切微服务组件使依靠联系收效。
5. Pyroscope 基本运用
拜访 Pyroscope 的 4040 对外服务端口,即可拜访 Pyroscope UI。
在 Single View 视图中,能够经过 Application 挑选服务。它能够显现某一段时刻内的火焰图,也能够运用表格展现或者一起展现,火焰图能够看到微服务办法调用的功能指标。
在 Comparison View 视图中,能够挑选不同的时刻段进行比较,经过时刻线拖拽即可。
在 Diff View 视图中,能够进行两个时刻段的差异比对,这通常在排查微服务的CPU、内存泄漏时很有效。
最终
Pyroscope 还能够结合 Jaeger 一起运用,能够集成在 Jaeger UI 中,可参阅 Jaeger UI 集成
Rainbond 是一个云原生运用办理渠道,核心100%开源、运用简单、不需要懂容器和Kubernetes,支撑办理多种Kubernetes集群,供给企业级运用的全生命周期办理。