跳到主要内容

分析后端插件

本指南提供有关配置后端插件以在启动时启用某些诊断,从而生成性能分析数据的说明。性能分析数据为调查某些性能问题(例如 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://127.0.0.1:<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://127.0.0.1:<profiling_port>/debug/pprof/heap > heap1.pprof
sleep 30
curl https://127.0.0.1:<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://127.0.0.1:<profiling_port>/debug/pprof/profile?seconds=30' > profile.pprof

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

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

更多信息

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