基于pyroscope-go项目性能数据持续收集

背景

在日常开发过程中,遇到类似崩溃或者cpu飚高时刻没法获取到有效的pprof数据,从而去优化修复项目。所以我们需要引入持续性分析且能够允许我们随着时间的推移了解系统资源的使用情况,从而定位、调试和修复性能相关的问题。

使用场景

  1. 查找代码中的性能问题

  2. 解决高 CPU 利用率的问题

  3. 定位并修复内存泄漏

  4. 理解应用程序的调用树

  5. 跟踪指标随时间的变化

性能及原理

  1. 关于采集文件存储:在官方文档有说明:为避免丢失最新数据,当它检测到数据路径所在的卷接近磁盘不足,Pyroscope 将删除最旧的块。

  2. pyroscope是定时从runtime提供的几个函数获取系统指标数据,以及pprof上报是通过http上传到远程server中,只要上传和获取频率不是非常大,对业务本身影响并不大

部署

colobu.com/2022/01/27/...

为便于使用,目前采用的是Go Agent ,采用push模式,参考文档

dockerfile 复制代码
docker run -it  --name=pyroscope-go -p 4040:4040 pyroscope/pyroscope:latest server
go 复制代码
go get github.com/grafana/pyroscope-go

package main

import "github.com/grafana/pyroscope-go"

func main() {
  // These 2 lines are only required if you're using mutex or block profiling
  // Read the explanation below for how to set these rates:
  runtime.SetMutexProfileFraction(5)
  runtime.SetBlockProfileRate(5)

  pyroscope.Start(pyroscope.Config{
    ApplicationName: "simple.golang.app", //自定义应用名称

    // replace this with the address of pyroscope server
    ServerAddress:   "http://pyroscope-server:4040", //本地是http://127.0.0.1:4040

    // you can disable logging by setting this to nil
    Logger:          pyroscope.StandardLogger,

    // you can provide static tags via a map:
    Tags:            map[string]string{"hostname": os.Getenv("HOSTNAME")},

    ProfileTypes: []pyroscope.ProfileType{
      // these profile types are enabled by default:
      pyroscope.ProfileCPU,
      pyroscope.ProfileAllocObjects,
      pyroscope.ProfileAllocSpace,
      pyroscope.ProfileInuseObjects,
      pyroscope.ProfileInuseSpace,

      // these profile types are optional:
      pyroscope.ProfileGoroutines,
      pyroscope.ProfileMutexCount,
      pyroscope.ProfileMutexDuration,
      pyroscope.ProfileBlockCount,
      pyroscope.ProfileBlockDuration,
    },
  })

  // your code goes here
}

只要以上两步,访问127.0.0.1:4040你就可以看到布灵布灵的火焰图了

目前我本地只是做了pprof的收集分析,大佬们后续可以考虑线上k8s环境中借鉴七猫技术团队的方案的引入holmes,发现业务性能问题,和上报机制

本文参考文档如下:

github.com/grafana/pyr...

github.com/mosn/holmes...

相关推荐
Csvn34 分钟前
📊 SQL 入门 Day 11:CASE 表达式:SQL 里的 if-else 魔法
后端·sql
QQ_216962909636 分钟前
Spring Boot 养老院管理系统:从入住、护理到费用结算的全流程实现(源码可领)
java·spring boot·后端
万少3 小时前
DeepSeek-V4-Flash 正式版上线了,但这 3 个坑我帮你提前踩了
前端·javascript·后端
明月_清风3 小时前
🚀 Palantir Foundry 本体论实战:当 Ontology 从"知识图谱"进化为"企业操作系统"
前端·后端
明月_清风3 小时前
从概念到代码:用 Ontology 构建你的第一个知识图谱
前端·后端
Python私教3 小时前
Django 6.1 邮件配置大改:旧项目如何平稳升级?
后端·python·django
Python私教3 小时前
Django 6.1 升级避坑:数据库版本不兼容怎么解决?
后端·python·django
Python私教3 小时前
Django 接口开发实测:新手还需要使用 REST 框架吗?
后端·python·django
techdashen4 小时前
Go设计取舍之三: 0.3ns每次的错误Benchmark
开发语言·后端·golang
TunerT_TQ5 小时前
Valhalla 静态工程审阅 #007|AgentENV 源码证据驱动评测【大厂开源基础设施特辑】
rust·开源·go·github·sandbox·分布式系统·ai基础设施