随着微服务体系在生产环境落地,也会伴随着一些问题出现,比如流量过大造成某个微服务应用程序的性能瓶颈、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: 处理、聚合和存储来自代理的数据,以便在任何时间范围内快速查询。片刻后可以查看分析数据,并在任何时间范围内进行查询。

与 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:https://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 并安装到指定应用中。

2. 部署 Pyroscope Server

通过开源应用商店一键安装Pyroscope Server,新增 -> 基于应用商店创建组件 -> 在开源应用商店中搜索 Pyroscope 并安装到指定应用中。

3. 安装 Pyroscope Java Agent 插件并配置

  1. 插件 -> 从应用商店安装插件,搜索 Pyroscope-Java-Agent 进行安装。

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

  1. 为每个微服务组件都设置以下环境变量,可在组件内 -> 环境变量 -> 添加变量。也可以通过应用配置组为所有组件统一配置 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 集成


微服务性能分析|Pyroscope 集合 Spring Cloud Pig 的实践分享的更多相关文章

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

    随着微服务体系在生产环境落地,也会伴随着一些问题出现,比如流量过大造成某个微服务应用程序的性能瓶颈.CPU利用率高.或内存泄漏等问题.要找到问题的根本原因,我们通常都会通过日志.进程再结合代码去判断根 ...

  2. 微服务组件--注册中心Spring Cloud Eureka分析

    Eureka核心功能点 [1]服务注册(register):Eureka Client会通过发送REST请求的方式向Eureka Server注册自己的服务,提供自身的元数据,比如ip地址.端口.运行 ...

  3. Spring Cloud 微服务四:熔断器Spring cloud hystrix

    前言:在微服务架构中,一般都是进程间通信,有可能调用链都比较长,当有底层某服务出现问题时,比如宕机,会导致调用方的服务失败,这样就会发生一连串的反映,造成系统资源被阻塞,最终可能造成雪崩.在sprin ...

  4. 【SpringCloud构建微服务系列】使用Spring Cloud Config统一管理服务配置

    一.为什么要统一管理微服务配置 对于传统的单体应用而言,常使用配置文件来管理所有配置,比如SpringBoot的application.yml文件,但是在微服务架构中全部手动修改的话很麻烦而且不易维护 ...

  5. 微服务实战SpringCloud之Spring Cloud Feign替代HTTP Client

    简介 在项目中我们有时候需要调用第三方的API,微服务架构中这种情况则更是无法避免--各个微服务之间通信.比如一般的项目中,有时候我们会使用 HTTP Client 发送 HTTP 请求来进行调用,而 ...

  6. 微服务架构 | *2.3 Spring Cloud 启动及加载配置文件源码分析(以 Nacos 为例)

    目录 前言 1. Spring Cloud 什么时候加载配置文件 2. 准备 Environment 配置环境 2.1 配置 Environment 环境 SpringApplication.prep ...

  7. 微服务生态组件之Spring Cloud OpenFeign详解和源码分析

    Spring Cloud OpenFeign 概述 Spring Cloud OpenFeign 官网地址 https://spring.io/projects/spring-cloud-openfe ...

  8. 微服务生态组件之Spring Cloud LoadBalancer详解和源码分析

    Spring Cloud LoadBalancer 概述 Spring Cloud LoadBalancer目前Spring官方是放在spring-cloud-commons里,Spring Clou ...

  9. Spring Cloud分区发布实践(3) 网关和负载均衡

    注意: 因为涉及到配置测试切换, 中间环节需按此文章操作体验, 代码仓库里面的只有最后一步的代码 准备好了微服务, 那我们就来看看网关+负载均衡如何一起工作 新建一个模块hello-gateway, ...

随机推荐

  1. 想写个小说,关于C#的,名字就叫《原Csharp》吧 (第一回 买书未成炁自生 惶惶回屋遇老翁)

    以前也有写过一些小说,但是总是写写停停的,因为忙于项目和其他事情,总是耽搁很久(真的是很久)才会继续动两笔,所以我想先在这里以随笔的方式写个关于C#异世界的小故事吧,更新随缘,也稍微能让自己轻松些. ...

  2. 3D可视化解决方案为巷道工程安全护航

    最近山东栖霞笏山金矿事故中被困22名矿工的生命安全,在揪着全国民的心.大家都在祈求他们能从井下活着回来. 正是由于被困矿工的坚韧意志和政府相关部门不眠不休的奋力营救,11名矿工终于在被困十余日后平安升 ...

  3. SAP Web Dynpro-协助类

    在Web Dynpro组件中,您可以创建从抽象类继承的唯一分配的类. 协助类可以存储组件中必需的但未与布局链接的编码. 您可以将动态文本存储在协助类中,也可以在运行时合并文本,也可以将变量存储在文本池 ...

  4. SAP 实例 5 CFW Events

    REPORT demo_custom_control . * Declarations ***************************************************** CL ...

  5. jenkins结合ansible发布

    1. yum安装的jenkins修改配置文件调用ansible vim /etc/sysconfig/jenkins 2. 安装Jenkins Ansible插件 Manage Jenkins---& ...

  6. UiPath文本操作Set Text的介绍和使用

    一.Set Text的介绍 向输入框/文本框写入文本的一种操作 二.Set Text在UiPath中的使用 1.打开设计器,在设计库中新建一个Sequence,为序列命名及设置Sequence存放的路 ...

  7. C# · 委托语句简化演变

    1.委托基础语句形式 namespace QLVision { delegate void dHelp();//定义委托 static class Program { /// <summary& ...

  8. NC25136 [USACO 2006 Ope B]Cows on a Leash

    NC25136 [USACO 2006 Ope B]Cows on a Leash 题目 题目描述 给定如图所示的若干个长条.你可以在某一行的任意两个数之间作一条竖线,从而把这个长条切开,并可能切开其 ...

  9. freeswitch拨打分机号源代码跟踪

    概述 freeswitch是一款非常好用的开源VOIP软交换平台. 之前我们有介绍过使用fs拨打分机号的方法,其中代码流程是比较复杂的,所以单独开一章介绍. fs拨打分机号,是使用send_dtmf接 ...

  10. 服务器与Ajax

    前端相关的技术点 HTML   主要用来实现页面的排版布局 CSS   主要用来实现页面的样式美化 JavaScript   主要用来实现前端功能特效 Ajax基础知识铺垫 客户端与服务器 通信协议( ...