微服务性能分析|Pyroscope 集合 Spring Cloud Pig 的实践分享
随着微服务体系在生产环境落地,也会伴随着一些问题出现,比如流量过大造成某个微服务应用程序的性能瓶颈、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:https://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 集成
微服务性能分析|Pyroscope 集合 Spring Cloud Pig 的实践分享的更多相关文章
- 微服务性能分析|Pyroscope 在 Rainbond 上的实践分享
随着微服务体系在生产环境落地,也会伴随着一些问题出现,比如流量过大造成某个微服务应用程序的性能瓶颈.CPU利用率高.或内存泄漏等问题.要找到问题的根本原因,我们通常都会通过日志.进程再结合代码去判断根 ...
- 微服务组件--注册中心Spring Cloud Eureka分析
Eureka核心功能点 [1]服务注册(register):Eureka Client会通过发送REST请求的方式向Eureka Server注册自己的服务,提供自身的元数据,比如ip地址.端口.运行 ...
- Spring Cloud 微服务四:熔断器Spring cloud hystrix
前言:在微服务架构中,一般都是进程间通信,有可能调用链都比较长,当有底层某服务出现问题时,比如宕机,会导致调用方的服务失败,这样就会发生一连串的反映,造成系统资源被阻塞,最终可能造成雪崩.在sprin ...
- 【SpringCloud构建微服务系列】使用Spring Cloud Config统一管理服务配置
一.为什么要统一管理微服务配置 对于传统的单体应用而言,常使用配置文件来管理所有配置,比如SpringBoot的application.yml文件,但是在微服务架构中全部手动修改的话很麻烦而且不易维护 ...
- 微服务实战SpringCloud之Spring Cloud Feign替代HTTP Client
简介 在项目中我们有时候需要调用第三方的API,微服务架构中这种情况则更是无法避免--各个微服务之间通信.比如一般的项目中,有时候我们会使用 HTTP Client 发送 HTTP 请求来进行调用,而 ...
- 微服务架构 | *2.3 Spring Cloud 启动及加载配置文件源码分析(以 Nacos 为例)
目录 前言 1. Spring Cloud 什么时候加载配置文件 2. 准备 Environment 配置环境 2.1 配置 Environment 环境 SpringApplication.prep ...
- 微服务生态组件之Spring Cloud OpenFeign详解和源码分析
Spring Cloud OpenFeign 概述 Spring Cloud OpenFeign 官网地址 https://spring.io/projects/spring-cloud-openfe ...
- 微服务生态组件之Spring Cloud LoadBalancer详解和源码分析
Spring Cloud LoadBalancer 概述 Spring Cloud LoadBalancer目前Spring官方是放在spring-cloud-commons里,Spring Clou ...
- Spring Cloud分区发布实践(3) 网关和负载均衡
注意: 因为涉及到配置测试切换, 中间环节需按此文章操作体验, 代码仓库里面的只有最后一步的代码 准备好了微服务, 那我们就来看看网关+负载均衡如何一起工作 新建一个模块hello-gateway, ...
随机推荐
- ShardingSphere-proxy-5.0.0容量范围分片的实现(五)
一.修改配置文件config-sharding.yaml,并重启服务 # # Licensed to the Apache Software Foundation (ASF) under one or ...
- 配置nginx多域名虚拟主机
1.先做域名映射,由于我们使用的是阿里云域名. 登录阿里云控制台-->域名与网站(万网)-->域名-->选择一个域名-->域名解析-->添加记录 配置静态资源下载转发: ...
- windows下telnet的用法
前言 这里利用Windows7下如何使用Telnet命令给大家总结如下: 第一步:在控制面板里,点击"程序"选项 第二步:在程序选项下,点击"打开或关闭Windows功能 ...
- 鼠标右键打开powershell
不需要更改配置文件什么的. 在桌面空白处按住Shift键同时鼠标右击,看看是不是就有了呢.
- 利用MySQL中的乐观锁和悲观锁实现分布式锁
背景 对于一些并发量不是很高的场景,使用MySQL的乐观锁实现会比较精简且巧妙. 下面就一个小例子,针对不加锁.乐观锁以及悲观锁这三种方式来实现. 主要是一个用户表,它有一个年龄的字段,然后并发地对其 ...
- Tapdata Cloud 版本上新 | 支持通知自配置,支持GP、MQ数据源,界面更友好!
Tapdata Cloud https://cloud.tapdata.net Tapdata Cloud 是国内首家异构数据库实时同步云平台,目前支持Oracle.MySQL.PG.SQL Serv ...
- CRM汇客 牛刀小试 5个BUG修复
1.权限管理-用户管理-高级搜索-手机号搜索不可用 1.1现象 1.2解决思路 1.2.1 定位接口 接口名:system/user/list 请求方式:GET请求 1.2.3 确定bug所在位置 b ...
- 用Bootstrap4写了一个WordPress主题Writing
这是一个简洁的WordPress博客主题,为专注写作而设计. 本主题使用Bootstrap4框架开发. 主要功能 自适应: 标签云页面模板: 两栏设计: 全宽页面模板: 支持设置背景色和背景图片: 8 ...
- Python语法糖,提升编程幸福感!!!
转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/a52bc938.html 大家好,我是测试蔡坨坨. 今天,我们来盘点一下Python中的那些语法糖. 什么是语法糖?语法糖不 ...
- springboot配置logback.xml
由于springboot框架自带log4j,因此我们只需配置下logback文件,即可, 在main/resources根目录下,新建logback-spring.xml文件,copy下述代码: &l ...