跳到主要内容

分析后端插件

本指南提供了有关配置后端插件以在启动时启用某些诊断以生成性能分析数据的说明。性能分析数据为调查某些性能问题提供了可能的有用信息,例如高 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 性能分析文档