性能分析工具 - Cloud Profiler

Cloud Profiler

性能分析是动态代码分析的一种形式,在应用运行时捕获应用的特征,然后使用这些特征信息确定如何使应用更快、更高效。

Cloud Profiler 是一个 CPU 和内存性能分析工具,是一种采样统计性能分析器,开销极低,适合生产环境。

以 Go 应用为例,用如下的代码在应用中开启 Profiler 代理,Profiler 代理会运行在新的 goroutine 中。

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

func main() {
    profiler.Start(profiler.Config{})   
}

Profiler 代理的作用是从应用捕获性能分析数据,并使用 Profiler API 将此数据传输到 Profiler 后端(Cloud Profiler)并创建性能分析文件,Cloud Profiler 每 1 分钟对 Compute/App Engine 的一个已开启 Profiler 代理服务的实例收集一次性能分析数据(一次收集通常持续 10 秒),从而创建一个性能分析文件。

对于一个应用版本的多个实例(意味着有多个代理),后端平均每分钟会选择 一个代理,并指示其捕获一个性能分析文件。

Profiler 后端会将性能分析文件与 GCP 项目相关联。然后,我们就能够在 GCP Console 中使用 Profiler 界面查看和分析该性能分析文件。

性能分析可对如下指标进行采集

时间

  1. CPU 时间:是 CPU 执行代码块所花费的时间。不包括 CPU 等待时间
  2. 实际用时:用于测量从进入到退出函数所经过的时间

时间测量有助于我们找出长时间占据 CPU 的代码,而长时间运行的 CPU 密集型代码块可能需要进行优化。

内存

  1. 堆用量(某一时间点):是收集性能剖析文件时程序在堆中所分配的内存量
  2. 堆分配量(某一段时间间隔,即 10s):是在收集性能剖析文件的时间间隔内程序在堆中分配的总内存量

帮助发现程序中潜在的低效和内存泄漏问题,高内存占用可能加重 GC 负担。

线程:帮助找出可能被创建的无用线程。

争用:多线程对共享资源的访问所花费的等待时间可能很长。


参考:

推荐阅读更多精彩内容