参加 2021 年 DevOps 现状问卷调查,塑造软件运维的未来,让我们了解您的想法。

快速入门:探索 Profiler

本页面介绍如何设置和使用 Cloud Profiler。下载示例 Go 程序,在启用性能剖析功能后运行该程序,然后使用 Profiler 界面浏览捕获的数据。

准备工作

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  3. 如需为您的项目启用 Cloud Profiler API,请在 Google Cloud Console 导航窗格中点击 Profiler,或使用下面的按钮:

    转到 Profiler

  4. 如需打开 Cloud Shell,请点击 Google Cloud Console 工具栏中的激活 Cloud Shell

    激活 Cloud Shell。

    片刻之后,Google Cloud Console 内会打开一个 Cloud Shell 会话:

    Cloud Shell 会话。

获取要剖析其性能的程序

示例程序 main.go 位于 GitHub 上的 golang-samples 代码库中。如需获取该程序,请检索示例 Go 软件包:

go get -u github.com/GoogleCloudPlatform/golang-samples/profiler/...

软件包检索需要一些时间才能完成。

剖析代码的性能

转到检索到的软件包中用于 Profiler 的示例代码目录:

cd ~/gopath/src/github.com/GoogleCloudPlatform/golang-samples/profiler/profiler_quickstart

main.go 程序将创建一个 CPU 密集型工作负载,为 Profiler 提供数据。启动程序并使其保持运行状态:

 go run main.go

此程序设计为在运行时加载 CPU。它已配置为使用 Profiler,Profiler 会在程序运行时从中收集性能剖析数据,然后定期保存。

启动程序后,您会在几秒钟内看到 profiler has started 消息。大约一分钟后,会显示另外两条消息:

 successfully created profile CPU
 start uploading profile

这些消息表示性能剖析文件已创建并上传到 Cloud Storage 项目。程序只要还在运行,就会持续发出上两条消息,大约每分钟一次。

如果您在启动服务后收到权限被拒绝的错误消息,请参阅为什么我会收到权限被拒绝的错误以了解可能的原因。

Profiler 界面

您启动应用后,Profiler 很快就会显示初始性能剖析数据。该界面提供了一系列控件和一个火焰图,供您浏览性能剖析数据:

包含示例代码的 Profiler 界面

时间控件下方有一些选项,可用于选择要使用的那组性能剖析数据。在对多个应用进行性能剖析时,您可以使用服务来选择性能剖析数据的来源。 性能剖析类型用于选择要显示的性能剖析数据的类型。借助地区名称版本,您可以只显示来自特定 Compute Engine 地区或特定应用版本的数据。借助权重,您可以选择资源使用高峰期捕获的性能剖析文件。

如需优化火焰图显示您选择分析的性能剖析文件的方式,请添加过滤条件。在上面的屏幕截图中,过滤栏 显示了一个过滤条件。此过滤条件选项是 Metric,过滤条件值是 CPU time

浏览数据

在选择控件下方,程序的调用堆栈显示在火焰图中。火焰图使用帧来表示每个函数。 帧的宽度表示该函数的资源耗用比例。 顶层帧表示整个程序。这个帧始终显示所有资源耗用量,还会列出此图对多少性能剖析文件求取了平均值。

示例程序并未包含一组复杂的调用堆栈;上一屏幕截图中显示了 5 个帧:

  • 灰色帧表示整个可执行服务,包含所有被耗用的资源。
  • 绿色 main 帧是 Go runtime.main
  • 橙色 main 帧是示例程序的 main 例程。
  • 橙色 busyloop 帧是从示例的 main 中调用的例程。
  • 橙色 main.load 帧是从示例的 main 中调用的例程。

借助过滤条件选择器,您可以执行一些操作,如过滤掉与某个名称匹配的函数。例如,如果存在标准的实用程序函数库,则可以从图中移除它们。您还可以移除通过某种方法生成的调用堆栈或者使用其他方式简化火焰图。 main.go 应用很简单,因此可过滤掉的内容不多。

即使对于简单的应用,您也可以借助过滤条件隐藏不感兴趣的帧,以便更清楚地查看感兴趣的帧。例如,在示例代码的性能剖析屏幕截图中,灰色帧略大于其下方的第一个 main 帧。为什么?是不是发生了其他一些变化,但由于 main 调用堆栈耗用了绝大部分资源,这些变化未能立即显现出来?如需了解在应用的 main 例程外部发生的状况,请添加一个隐藏 main 例程的调用堆栈的过滤条件。只有 0.227% 的资源消耗是在 main 外部发生的:

示例程序中的隐藏堆栈

如需详细了解过滤以及浏览性能剖析数据的其他方法,请参阅使用 Profiler 界面

后续步骤

需要了解更多一般信息?

如需了解如何运行 Cloud Profiler 代理,请参阅: