跳到主要内容

对后端插件进行性能分析

本指南提供了配置后端插件的说明,以便在启动时启用某些诊断功能,生成 性能分析数据。性能分析数据为调查某些性能问题(例如高 CPU 或内存使用率)或使用 持续性能分析 时提供潜在有用的信息。

配置性能分析数据

Grafana 配置文件允许您在 [plugin.<plugin ID>] 下配置性能分析。

在文件的此部分中,指定要进行性能分析的后端插件的唯一标识符 <plugin ID>,例如 grafana-github-datasource,以及性能分析配置选项(详见下面的子部分)。

配置示例

custom.ini
[plugin.<plugin ID>]
profiling_enabled = true
profiling_port = 6060
profiling_block_rate = 5
profiling_mutex_rate = 5

应用配置更改后重新启动 Grafana。您应该会看到一条日志消息,指示性能分析是否已启用。例如

INFO [07-09|19:15:00] Profiling enabled   logger=plugin.<plugin ID> blockProfileRate=5 mutexProfileRate=5
注意

为了能够使用 profiling_block_rateprofiling_mutex_rate,您的插件需要使用至少 grafana-plugin-sdk-go v0.238.0。有关如何更新 SDK 的说明,请参阅更新 Go SDK

profiling_enabled 选项

使用此选项启用/禁用性能分析。默认值为 false

profiling_port 选项

您可以选择自定义用于暴露性能分析数据的 HTTP 端口。例如,如果您想分析多个插件或默认端口已被占用,则可以使用此选项。默认值为 6060

profiling_block_rate 选项

使用此选项控制在阻塞性能分析中报告的 goroutine 阻塞事件的比例。默认值为 0(即不跟踪任何事件)。例如,使用 5 表示报告所有事件的 20%。有关详细信息,请参阅 https://pkg.go.dev/runtime#SetBlockProfileRate

注意

比例越高(即此值越小),它对正常操作增加的开销就越大。

profiling_mutex_rate 选项

使用此选项控制在互斥锁性能分析中报告的互斥锁竞争事件的比例。默认值为 0(即不跟踪任何事件)。例如,使用 5 表示报告所有事件的 20%。有关详细信息,请参阅 https://pkg.go.dev/runtime#SetMutexProfileFraction

注意

比例越高(即此值越小),它对正常操作增加的开销就越大。

关于开销的说明

在启用性能分析且未启用阻塞互斥锁性能分析的情况下运行后端插件只会增加少量开销。因此,这些端点适用于生产或持续性能分析场景。

添加少量阻塞和互斥锁性能分析(例如 5 或 10,即 10% 到 20%)通常是可以的,但您的体验可能会因插件而异。

另一方面,也存在潜在问题。例如,如果您遇到请求缓慢或排队且没有任何线索,那么您可以临时配置性能分析以收集 100% 的阻塞和互斥锁性能分析数据以获得全貌。完成后,在收集完数据后关闭它。

检查调试端点

通过浏览 https://:<profiling_port>/debug/pprof 检查哪些调试端点可用。

在此文件中,使用了 localhost,这意味着您已连接到运行 Grafana 和插件的主机。如果从其他主机连接,请根据需要调整。

其他端点

还有一些可用于性能分析的额外 godeltaprof 端点。这些端点更适合持续性能分析场景。

这些端点是

  • /debug/pprof/delta_heap
  • /debug/pprof/delta_block
  • /debug/pprof/delta_mutex

收集和分析性能分析数据

通常,您使用 Go 命令 pprof 来收集和分析性能分析数据。您也可以使用 curl 或类似工具来收集性能分析数据,这在没有 Go pprof 命令的环境中会很方便。

接下来,我们来看一些使用 curlpprof 收集和分析内存和 CPU 性能分析数据的示例。

分析高内存使用和内存泄漏

当遇到高内存使用或潜在内存泄漏时,收集多个堆性能分析数据非常有用。稍后您可以分析和比较它们。

在收集每个性能分析数据之间等待一段时间(例如 30 秒)是个好主意,以便内存消耗增加。

在以下示例中,使用 localhost 表示您已连接到运行 Grafana 和插件的主机。如果您从其他主机连接,请根据需要调整命令。

curl https://:<profiling_port>/debug/pprof/heap > heap1.pprof
sleep 30
curl https://:<profiling_port>/debug/pprof/heap > heap2.pprof

然后您可以使用 pprof 工具比较两个堆性能分析数据。例如

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

分析高 CPU 使用率

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

在以下示例中,使用 localhost 表示您已连接到运行 Grafana 和插件的主机。如果您从其他主机连接,请根据需要调整命令。

curl 'https://:<profiling_port>/debug/pprof/profile?seconds=30' > profile.pprof

然后您可以使用 pprof 工具比较两个堆性能分析数据。例如

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

更多信息

有关如何对 Grafana 进行性能分析的更多信息和说明,请参阅 Grafana 性能分析文档