Skip to content

yAntPower/make_pprof

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Go Pprof 自动生成工具

本工具用于自动从目标 Go 程序获取 pprof 数据,并将其保存到本地文件系统。它可以根据预设的时间间隔或当目标程序的内存使用达到特定阈值时触发 pprof 数据的生成。

功能

  • 定时生成 pprof 文件: 按指定的时间间隔定期生成 CPU profile、trace 和 heap profile。
  • 基于内存阈值生成 pprof 文件: 监控目标程序的内存使用情况 (/debug/vars 中的 memstats.Alloc),当内存使用超过设定的阈值时,自动生成 CPU profile、trace 和 heap profile。
  • 自定义配置: 可以通过命令行参数配置目标程序地址、pprof 文件保存目录、内存阈值和生成间隔。
  • 日志记录: 记录操作过程和潜在错误。

如何使用

构建

go build main.go

运行

./main [参数]

命令行参数

  • -target <地址:端口>: 目标 Go 程序的 HTTP 地址。默认为 127.0.0.1:6060。目标程序需要已启用 net/http/pprof
  • -save-dir <目录路径>: 指定 pprof 文件保存的目录。默认为 ./pprof_dumps。如果目录不存在,程序会尝试创建它。
  • -memory-threshold <GB>: 指定触发 pprof 文件生成的内存阈值(单位:GB)。默认为 15。当目标程序的 memstats.Alloc 达到此阈值时,会生成一组 pprof 文件。
  • -periodic-interval <时长>: 指定定期生成 pprof 文件的时间间隔(例如:10m 表示10分钟)。默认为 10m

示例

  1. 使用默认参数运行: 监控 127.0.0.1:6060,每 10分钟 生成一次 pprof 文件,并在内存使用达到 15GB 时生成 pprof 文件。文件保存在 ./pprof_dumps 目录。

    ./main
  2. 指定目标和保存目录: 监控 myapp.example.com:8080,pprof 文件保存在 /data/pprof_data

    ./main -target myapp.example.com:8080 -save-dir /data/pprof_data
  3. 自定义内存阈值和时间间隔: 监控 127.0.0.1:6060,当内存使用达到 8GB 时生成 pprof 文件,并且每 30分钟 生成一次 pprof 文件。

    ./main -memory-threshold 8 -periodic-interval 30m

生成的 Pprof 文件

生成的 pprof 文件会包含以下信息,并存储在指定的 -save-dir 目录中:

  • CPU Profile: cpu_<目标地址>_<原因>_<时间戳>.pprof
    • <原因>: periodic (定时触发) 或 memory_threshold_<内存大小>GB (内存阈值触发)。
    • CPU profile 默认采样5秒。
  • Trace: trace_<目标地址>_<原因>_<时间戳>.pprof
    • Trace 默认采样5秒。
  • Heap Profile: heap_<目标地址>_<原因>_<时间戳>.pprof

<目标地址> 会被处理以移除特殊字符,替换为下划线 _<时间戳> 格式为 YYYYMMDDTHHMMSS

注意事项

  • 确保目标 Go 程序已导入 net/http/pprof 包,并且其 pprof 端口 (/debug/pprof/) 可通过指定的 -target 地址访问。
  • 如果目标程序也导入了expvar包,通过 /debug/vars 暴露了 memstats,则内存阈值功能才能正常工作。
  • 程序会一直运行,直到手动停止(例如,通过 Ctrl+C)。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages