首页 > 其他分享 >微服务性能分析工具 Pyroscope 初体验

微服务性能分析工具 Pyroscope 初体验

时间:2023-07-28 23:33:27浏览次数:33  
标签:初体验 http pyroscope 性能 Pyroscope Profiling main CPU

Go 自带接口性能分析工具 pprof,较为常用的有以下 4 种分析:

  • CPU Profiling: CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗 CPU 周期时花费时间的位置;
  • Memory Profiling: 内存分析,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏;
  • Block Profiling: 阻塞分析,记录 goroutine 阻塞等待同步(包括定时器通道)的位置;
  • Mutex Profiling: 互斥锁分析,报告互斥锁的竞争情况。

接入方式:

package main

import (
    "net/http"
    _ "net/http/pprof"
)

func main() {
    http.ListenAndServe("0.0.0.0:6060", nil)
}

它使用默认的 http.DefaultServeMux 结构,注册了 /debug/pprof/ 路由,在浏览器访问可以访问 CPU/Memory/Block/Mutex/Goroutine 等性能分析页面。

对于线上服务来说,需要针对该路由做好限制,否则可能直接暴露到系统外部,造成数据安全问题。

如果是内部服务,自己电脑的浏览器看不到页面,就很麻烦了。而 Pyroscope 这个项目就非常爽~

它有一个非常漂亮的 UI 界面,展示 Agent 采集的数据,能直观地展示程序各个函数的调用耗时,从而找出性能瓶颈。

架构图如下:

Pyroscope 架构图

接入方式也非常简单,本地搭建服务的话(macOS),输入以下命令:

brew install pyroscope-io/brew/pyroscope
pyroscope server

对应的服务需要加入以下代码:

package main

import (
    "github.com/pyroscope-io/client/pyroscope"
)

func initPyroScope() {
    runtime.SetMutexProfileFraction(5)
    runtime.SetBlockProfileRate(5)
    _, _ = pyroscope.Start(pyroscope.Config{
        ApplicationName: app.ServerName,                 // 应用名称
        ServerAddress:   "http://pyroscope.test.com.cn", // 上报地址
        Logger:          pyroscope.StandardLogger,
        Tags:            map[string]string{"hostname": os.Getenv("HOSTNAME")},
        ProfileTypes: []pyroscope.ProfileType{
            pyroscope.ProfileCPU,
            pyroscope.ProfileAllocObjects,
            pyroscope.ProfileAllocSpace,
            pyroscope.ProfileInuseObjects,
            pyroscope.ProfileInuseSpace,
            pyroscope.ProfileGoroutines,
            pyroscope.ProfileMutexCount,
            pyroscope.ProfileMutexDuration,
            pyroscope.ProfileBlockCount,
            pyroscope.ProfileBlockDuration,
        },
    })
}

func main() {
    initPyroScope()
    // ...
}

其中,ApplicationNameServerAddress 需要自行替换。

如果是本地,ServerAddress 请改成 "http://127.0.0.1:4040",接着运行 benchmark 压测:

ab -c 100 -n 10000 'http://127.0.0.1:8099/api/xxx-service/v1/yyy/get_test?gid=23333'

可以得到火焰图(好漂亮啊):

火焰图1

此时可以看到最耗时的是 HTTP 服务的调用,还有 JSON 的序列化:

火焰图2

说明我们的程序接口,在某个输入参数的情况下,没有出现逻辑上的瓶颈。

我们可以多变换输入参数,根据业务逻辑找到最复杂最消耗性能的模块,有针对性进行性能优化。


文章来源于本人博客,发布于 2022-06-12,原文链接:https://imlht.com/archives/391/

标签:初体验,http,pyroscope,性能,Pyroscope,Profiling,main,CPU
From: https://www.cnblogs.com/lofanmi/p/17589138.html

相关文章

  • 英特尔® VTune™ Profiler 用户指南——程序性能异常检测分析
    https://www.intel.com/content/www/us/en/develop/documentation/vtune-help/top/analyze-performance/algorithm-group/anomaly-detection-analysis.html 异常检测分析(预览) 使用异常检测来识别频繁重复的代码间隔(如循环迭代)中的性能异常。在微秒和纳秒级别执行细粒度分析。应用......
  • 分布式ID性能评测:CosId VS 美团 Leaf
    分布式ID性能评测:CosIdVS美团Leaf基准测试环境MacBookPro(M1)JDK17JMH1.36运行在本机的Docker的mariadb:10.6.4运行基准测试基准测试代码:https://github.com/Ahoo-Wang/CosId/tree/main/[email protected]:Ahoo-Wang/CosId.gitcdco......
  • 龙蜥白皮书精选:面向 HTTP 3.0 时代的高性能网络协议栈
    文/高性能网络 SIG01背景概述 随着互联网特别是移动互联网的快速发展,对互联网通信协议提出了新的诉求。经过多年的发展,QUIC协议在2021年正式被IEFT标准化,成为HTTP3的标准传输层协议。QUIC是基于UDP实现的面向连接可靠有序的传输协议。相比于TCP在内核态实现,QUIC......
  • 各大云服务厂商 轻量应用服务器 性能评测对比,阿里云、腾讯云、华为云、Ucloud
    阿里云、腾讯云、华为云、Ucloud(优刻得)的轻量应用服务器性能测试和价格对比。测试项目有:CPU性能,内存读写速度、硬盘IO速度测试用的脚本和软件有:lemonbench、Geekbench5、CPU-Z、Unixbench、宝塔面板、phoronix-test-suite本次测评对比的轻量应用服务器配置统一为2核4G,系统统一为C......
  • 阿里云 杭州 ARM 云服务器性能评测
    阿里云杭州机房ARM计算型c6r(ecs.c6r.large)云服务器评测阿里云—阿里巴巴集团旗下公司,创立于2009年,是全球领先的云计算及人工智能科技公司。致力于以在线公共服务的方式,提供安全、可靠的计算和数据处理能力,让计算和人工智能成为普惠科技。阿里云服务着制造、金融、政务、交通、医......
  • nvidia显卡设置 让显卡发挥最大的性能
    1、打开官网https://www.nvidia.cn/geforce/drivers/查看电脑系统位数和显卡(GPU)的版本产品系列:Notebooks表示笔记本2、点击【搜索】-【下载】(game表示游戏驱动)-【下载】3、双击运行exe文件4、使用邮箱注册账号时注意要设置正常的年龄PS设置1、设置PS使用GPU处理:点击【......
  • Java开发 - SpringCache初体验
    前言早些时候,博主介绍过Redis的使用:Java开发-Redis初体验,Redie是基于缓存的一项技术,对于Redis,博主此处不再赘述,不了解的可以去看这篇文章,但Redis缓存并不是顶峰,本文要讲的内容就是Redis的辅助工具:SpringCache——的使用。有了SpringCache,Redis便可如虎添翼,使用效果更上一层楼,下面......
  • 高性能网络SIG月度动态:virtio新设备进入virtio规范、smc新特性IPC性能比tcp提升88% |
    高性能网络SIG:在云计算时代,软硬件高速发展,云原生、微服务等新的应用形态兴起,让更多的数据在进程之间流动,而网络则成为了这些数据流的载体,在整个云时代扮演者前所未有的重要角色。在这个万物互联的时代,云上的网络通信效率对各种服务至关重要,高性能网络兴趣组致力于利用XDP、R......
  • 高性能存储SIG月度动态:DSMS开始适配Anolis OS、将在ANCK 5.10中支持ublk | 龙蜥 SIG
    高性能存储技术SIG目标:高性能存储技术兴趣组致力于存储栈性能挖掘,当前主要聚焦内核io_uring技术优化异步IO性能,使用持久化内存提升业务单成本性能,容器场景存储技术优化等课题。期望通过社区平台,打造标准的高性能存储技术软件栈,推动软硬件协同发展。 01本月SIG......
  • 通过 Javacore 诊断线程挂起等性能问题
    Javacore与WebSphereCommerce性能问题近年来,依据WebSphereCommerce(以下简称为WC)搭建的电子商务网站系统日益增多。由于系统本身的复杂性,一旦系统出现问题,尤其是性能问题,问题诊断和定位就会非常困难。下图所示为由WC系统为核心搭建的电子商务网站的一般逻辑架构,如图......