配置 Grafana 的性能剖析和追踪功能以进行故障排除
您可以设置 grafana-server
进程在启动时启用某些诊断功能。这对于调查某些性能问题非常有用。不建议默认启用这些功能。
开启性能剖析并收集性能剖析数据
grafana-server
可以在启动时带上命令行选项 -profile
来启用性能剖析,-profile-addr
来覆盖默认的 HTTP 地址(localhost
),以及 -profile-port
来覆盖提供 pprof
调试端点的默认 HTTP 端口(6060
)。此外,-profile-block-rate
控制在阻塞剖析中报告的 goroutine 阻塞事件的比例,出于向后兼容的原因,默认值为 1
(即跟踪每个事件),-profile-mutex-rate
控制在互斥锁竞争剖析中报告的互斥锁竞争事件的比例,默认值为 0
(即不跟踪任何事件)。比例越高(即该值越小),对正常操作增加的开销越大。
启用性能剖析且不启用阻塞和互斥锁性能剖析的 Grafana 运行只会增加很小的开销,适用于连续性能剖析。添加小比例的阻塞和互斥锁性能剖析,例如 10-5 (10%-20%),通常是可以接受的。
启用性能剖析
./grafana server -profile -profile-addr=0.0.0.0 -profile-port=8080
启用性能剖析,并以 20% 的比例启用阻塞和互斥锁性能剖析
./grafana server -profile -profile-addr=0.0.0.0 -profile-port=8080 -profile-block-rate=5 -profile-mutex-rate=5
请注意,pprof
调试端点在与 Grafana HTTP 服务器不同的端口上提供服务。通过浏览 http://<profile-addr>:<profile-port>/debug/pprof
查看可用的调试端点。
还有一些额外的 godeltaprof 端点可用,它们更适用于连续性能剖析场景。这些端点包括 /debug/pprof/delta_heap
、/debug/pprof/delta_block
、/debug/pprof/delta_mutex
。
您可以使用环境变量配置或覆盖性能剖析设置
export GF_DIAGNOSTICS_PROFILING_ENABLED=true
export GF_DIAGNOSTICS_PROFILING_ADDR=0.0.0.0
export GF_DIAGNOSTICS_PROFILING_PORT=8080
export GF_DIAGNOSTICS_PROFILING_BLOCK_RATE=5
export GF_DIAGNOSTICS_PROFILING_MUTEX_RATE=5
通常,您使用 Go 命令 pprof 来收集和分析性能剖析数据。您也可以使用 curl 或类似工具来收集性能剖析数据,这在没有安装 Go/pprof 命令的环境中会很方便。接下来是一些使用 curl 和 pprof 收集和分析内存及 CPU 性能剖析数据的示例。
分析高内存使用/内存泄漏
当遇到高内存使用或潜在内存泄漏时,收集多个堆剖析数据并在后续分析时进行比较会很有用。建议在每次收集剖析数据之间等待一段时间,例如 30 秒,以允许内存消耗增加。
curl http://<profile-addr>:<profile-port>/debug/pprof/heap > heap1.pprof
sleep 30
curl http://<profile-addr>:<profile-port>/debug/pprof/heap > heap2.pprof
然后您可以使用 pprof 工具比较两个堆剖析数据
go tool pprof -http=localhost:8081 --base heap1.pprof heap2.pprof
分析高 CPU 使用率
当遇到高 CPU 使用率时,建议收集一段时间(例如 30 秒)的 CPU 性能剖析数据。
curl 'http://<profile-addr>:<profile-port>/debug/pprof/profile?seconds=30' > profile.pprof
然后您可以使用 pprof 工具分析收集到的 CPU 性能剖析数据
go tool pprof -http=localhost:8081 profile.pprof
使用追踪
grafana-server
可以在启动时带上参数 -tracing
来启用追踪,以及 -tracing-file
来覆盖默认的追踪文件(trace.out
),追踪结果将写入该文件。例如:
./grafana server -tracing -tracing-file=/tmp/trace.out
您可以使用环境变量配置或覆盖性能剖析设置
export GF_DIAGNOSTICS_TRACING_ENABLED=true
export GF_DIAGNOSTICS_TRACING_FILE=/tmp/trace.out
在 Web 浏览器中查看追踪(需要安装 Go)
go tool trace <trace file>
2019/11/24 22:20:42 Parsing trace...
2019/11/24 22:20:42 Splitting trace...
2019/11/24 22:20:42 Opening browser. Trace viewer is listening on http://127.0.0.1:39735
有关如何分析追踪文件的更多信息,请参阅 Go 命令 trace。