基於 go pprof` 與 go trace 進行持續效能剖析

搖擺的小虎牙發表於2021-12-30

profiler 基於 go pprofgo trace 持續效能剖析工具

GitHub Demo

  • 根據配置檔案收集目標服務的樣本, 收集程式會監聽配置檔案的變化,即時應用變化後的配置檔案
  • 支援的樣本 trace fgprof profile mutex heap goroutine allocs block threadcreate
  • 提供 chart 觀測服務效能指標的趨勢,找出效能問題的時間點
  • 點選 chart 中的氣泡跳轉到 pproftrace 的詳細頁面進行進一步詳細的分析
pprof chart 點選氣泡跳轉pprof詳情
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 協議》,轉載必須註明作者和本文連結

相關文章