剖析 Go 应用的性能

本页面介绍如何修改 Go 应用以捕获 性能剖析数据,并将该数据发送到您的 Google Cloud 项目。如需了解性能剖析的常规信息,请参阅 性能剖析相关概念

Go 的性能剖析文件类型:

  • CPU 时间
  • 分配的堆
  • 争用 (Go mutex)
  • 线程 (Go goroutine)

支持的 Go 语言版本:

  • 除非另有说明,否则所有已正式维护的 Go 版本。 如需了解详情,请参阅 Go 语言发布政策

支持的性能剖析代理版本:

  • 支持代理的最新版本。通常,不支持发布超过一年的版本。我们建议您使用最近发布的代理版本。

支持的操作系统:

  • Linux。Linux 内核支持剖析 Go 应用的性能,其标准 C 库是使用 glibcmusl 实现的。如需了解针对 Linux Alpine 内核的特定配置信息,请参阅在 Linux Alpine 上运行

支持的环境:

启用 Profiler API

在使用性能剖析代理之前,请确保已启用底层 Profiler API。您可以使用 Google Cloud CLI 或 控制台检查 API 的状态,并在必要时启用 该 API: Google Cloud

gcloud CLI

  1. 如果您尚未在工作站上安装 Google Cloud CLI,请参阅 Google Cloud CLI 文档

  2. 运行以下命令:

    gcloud services enable cloudprofiler.googleapis.com
    

如需了解详情,请参阅 gcloud services

Google Cloud 控制台

  1. 启用 Cloud Profiler API。

    启用 API 所需的角色

    如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),该角色包含 serviceusage.services.enable 权限。了解如何授予角色

    启用 API

  2. 如果系统显示 API 已启用 ,则表示此 API 已经启用。如未显示,请点击启用 按钮。

向服务帐号授予 IAM 角色

如果您在 Google Cloud 资源上部署应用,并且您 使用的是默认服务帐号,并且尚未修改对该服务帐号的角色授予 ,则可以跳过本部分。

如果您执行以下任一操作,则需要向服务帐号授予 Cloud Profiler Agent (roles/cloudprofiler.agent) 的 IAM 角色:

  1. 您使用的是默认服务帐号,但修改了其角色授予。
  2. 您使用的是用户创建的服务帐号。
  3. 您使用的是 Workload Identity, 请向 Kubernetes 服务帐号授予 Cloud Profiler Agent 角色。

您可以使用 Google Cloud 控制台或 Google Cloud CLI 向服务帐号授予 IAM 角色。例如,您可以使用 gcloud projects add-iam-policy-binding 命令:

gcloud projects add-iam-policy-binding GCP_PROJECT_ID \
    --member serviceAccount:MY_SVC_ACCT_ID@GCP_PROJECT_ID. \
    --role roles/cloudprofiler.agent

在使用上述命令之前,请替换以下内容:

  • GCP_PROJECT_ID:您的项目 ID。
  • MY_SVC_ACCT_ID:您的服务帐号的名称。

如需了解详情,请参阅 管理对项目、文件夹和组织的访问权限

使用 Cloud Profiler

在所有受支持的环境中,若要使用 Profiler,请在应用中导入软件包,然后尽早在应用中初始化 Profiler。

MutexProfiling 配置选项设置为 true 即可启用互斥争用性能剖析(界面中的“争用”)。

如需详细了解 Profiler API 及所有配置选项,请参阅公共 API 文档

Compute Engine

对于 Compute Engine,请在 profiler.Config 中将 Service 设置为要进行性能剖析的服务的名称,并视需要将 ServiceVersion 设置为服务版本:


// snippets is an example of starting cloud.google.com/go/profiler.
package main

import (
	"cloud.google.com/go/profiler"