菜单
文档breadcrumb arrow Grafana 文档breadcrumb arrow 设置breadcrumb arrow 配置 Grafanabreadcrumb arrow 配置性能剖析和追踪
Enterprise 开源

配置 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%),通常是可以接受的。

启用性能剖析

bash
./grafana server -profile -profile-addr=0.0.0.0 -profile-port=8080

启用性能剖析,并以 20% 的比例启用阻塞和互斥锁性能剖析

bash
./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

您可以使用环境变量配置或覆盖性能剖析设置

bash
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 秒,以允许内存消耗增加。

bash
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 工具比较两个堆剖析数据

bash
go tool pprof -http=localhost:8081 --base heap1.pprof heap2.pprof

分析高 CPU 使用率

当遇到高 CPU 使用率时,建议收集一段时间(例如 30 秒)的 CPU 性能剖析数据。

bash
curl 'http://<profile-addr>:<profile-port>/debug/pprof/profile?seconds=30' > profile.pprof

然后您可以使用 pprof 工具分析收集到的 CPU 性能剖析数据

bash
go tool pprof -http=localhost:8081 profile.pprof

使用追踪

grafana-server 可以在启动时带上参数 -tracing 来启用追踪,以及 -tracing-file 来覆盖默认的追踪文件(trace.out),追踪结果将写入该文件。例如:

bash
./grafana server -tracing -tracing-file=/tmp/trace.out

您可以使用环境变量配置或覆盖性能剖析设置

bash
export GF_DIAGNOSTICS_TRACING_ENABLED=true
export GF_DIAGNOSTICS_TRACING_FILE=/tmp/trace.out

在 Web 浏览器中查看追踪(需要安装 Go)

bash
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