基于 go pprof 与 go trace 进行持续性能剖析

Profiler 是一个基于 go pprof 与 go trace 持续性能剖析工具

GitHub Demo

  • 样本采集
    • trace fgprof profile mutex heap goroutine allocs block threadcreate
  • 配置动态加载
    • 根据配置文件收集目标服务的样本, 收集程序会监听配置文件的变化,即时应用变化后的配置文件
  • 图表趋势
    • 提供图表观测多个服务性能指标的趋势,找出性能问题的时间点
    • 每一个气泡都是一份 Profile 与 Trace 的样本文件
  • 详细分析
    • 点击图表中的气泡跳转到 Profile 与 Trace 的详细页面进行进一步详细的分析点击 chart 中的气泡跳转到 pproftrace 的详细页面进行进一步详细的分析
图表趋势 点击气泡跳转 Profile 详情
sJjEId3bfK.jpeg!large v0vHMOMEgF.jpeg!large
点击气泡跳转 Trace 详情 点击气泡跳转 Trace 详情
dwoyLxyzRd.jpeg!large 85ZFKjOJgL.jpeg!large

快速入门

本地启动

# run server :8080
go run server/main.go 

# run ui :80
cd ui && npm install --registry=https://registry.npm.taobao.org && npm run dev --base_api_url=http://localhost:8080 

In Docker

# 无持久化
docker run -d -p 80:80 --name profiler xyctruth/profiler:latest

# 持久化
mkdir -vp ~/profiler/config/
cp ./collector.yaml ~/profiler/config/
docker run -d -p 80:80 -v ~/profiler/data/:/profiler/data/ -v ~/profiler/config/:/profiler/config/ --name profiler xyctruth/profiler:latest

抓取配置

需要被收集分析的 golang 程序,需要提供 net/http/pprof 端点,并配置在 ./collector.yaml 配置文件中。

配置文件可以在线更新,收集程序会监听配置文件的变化,即时应用变化后的配置文件。

collector.yaml

collector:
  targetConfigs:

    profiler-server:        # 目标名称
      interval: 15s         # 抓取间隔
      expiration: 0         # 无过期时间
      host: localhost:9000  # 目标服务host
      profileConfigs:       # 使用默认配置 

    server2:
      interval: 10s
      expiration: 168h      # 过期时间7天
      host: localhost:9000
      profileConfigs:       # 覆盖部分默认配置字段
        trace:
          enable: false
        fgprof:
          enable: false
        profile:
          path: /debug/pprof/profile?seconds=10
          enable: false
        heap:
          path: /debug/pprof/heap

profileConfigs 默认配置

profileConfigs:
  profile:
    path: /debug/pprof/profile?seconds=10
    enable: true
  fgprof:
    path: /debug/fgprof?seconds=10
    enable: true
  trace:
    path: /debug/pprof/trace?seconds=10
    enable: true
  mutex:
    path: /debug/pprof/mutex
    enable: true
  heap:
    path: /debug/pprof/heap
    enable: true
  goroutine:
    path: /debug/pprof/goroutine
    enable: true
  allocs:
    path: /debug/pprof/allocs
    enable: true
  block:
    path: /debug/pprof/block
    enable: true
  threadcreate:
    path: /debug/pprof/threadcreate
    enable: true

项目地址

github.com/xyctruth/profiler

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!