本工具用于自动从目标 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。
-
使用默认参数运行: 监控
127.0.0.1:6060,每10分钟生成一次 pprof 文件,并在内存使用达到15GB时生成 pprof 文件。文件保存在./pprof_dumps目录。./main
-
指定目标和保存目录: 监控
myapp.example.com:8080,pprof 文件保存在/data/pprof_data。./main -target myapp.example.com:8080 -save-dir /data/pprof_data
-
自定义内存阈值和时间间隔: 监控
127.0.0.1:6060,当内存使用达到8GB时生成 pprof 文件,并且每30分钟生成一次 pprof 文件。./main -memory-threshold 8 -periodic-interval 30m
生成的 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)。