剖析类型和检测
剖析是理解和优化应用程序性能的重要工具。在 Pyroscope 中,各种剖析类型可以对应用程序的不同方面进行深入分析。本指南将探讨这些类型并解释它们对您的程序的影响。
剖析类型指代应用程序性能分析的不同维度,重点关注 CPU 使用率、内存分配或线程同步等特定方面。
Pyroscope 支持以下剖析类型
- CPU(CPU 时间,墙钟时间)
- 内存(分配对象,分配空间,堆)
- 使用中的对象和使用中的空间
- Goroutine
- 互斥锁计数和持续时间
- 阻塞计数和持续时间
- 锁计数和持续时间
- 异常
有关剖析类型的更多详细信息,请参阅了解 Pyroscope 中的剖析类型及其用途。
按检测方法划分的剖析类型支持
您使用的检测方法决定了哪些剖析类型可用。您可以使用自动检测或手动检测。
使用 Grafana Alloy 进行自动检测
您可以使用 Grafana Alloy 收集器从应用程序发送数据。Alloy 支持使用 eBPF、Java 和 Golang 进行拉取模式的剖析。
有关更多信息,请参阅使用 Grafana Alloy 配置客户端发送剖析数据。
下表列出了使用 Alloy 进行自动检测时可用的剖析类型。
剖析类型 | Go(拉取) | Java | eBPF |
---|---|---|---|
CPU | 是 | 是 | 是 |
分配对象 | 是 | 是 | |
分配空间 | 是 | 是 | |
使用中的对象 | |||
使用中的空间 | |||
Goroutine | 是 | ||
互斥锁计数 | |||
互斥锁持续时间 | |||
阻塞计数 | 是 | ||
阻塞持续时间 | 是 | ||
锁计数 | 是 | ||
锁持续时间 | 是 | ||
异常 | |||
墙钟时间 | |||
堆 |
使用 SDK 进行检测
使用 Pyroscope 语言 SDK 可以直接检测您的应用程序以进行精确剖析。您可以根据应用程序的特定需求自定义剖析过程。
有关语言 SDK 的更多信息,请参阅Pyroscope 语言 SDK。
下表列出了基于语言 SDK 可用的剖析类型。
剖析类型 | Go(推送) | Java | .NET | Ruby | Python | Rust | Node.js |
---|---|---|---|---|---|---|---|
CPU | 是 | 是 | 是 | 是 | 是 | 是 | 是 |
分配对象 | 是 | 是 | 是 | ||||
分配空间 | 是 | 是 | 是 | ||||
使用中的对象 | 是 | 是 (7.0+) | |||||
使用中的空间 | 是 | 是 (7.0+) | |||||
Goroutine | 是 | ||||||
互斥锁计数 | 是 | 是 | |||||
互斥锁持续时间 | 是 | 是 | |||||
阻塞计数 | 是 | ||||||
阻塞持续时间 | 是 | ||||||
锁计数 | 是 | 是 | |||||
锁持续时间 | 是 | 是 | |||||
异常 | 是 | ||||||
墙钟时间 | 是 | 是 | |||||
堆 | 是 (7.0+) | 是 |
span 剖析支持的剖析类型
Pyroscope 可以与支持 OpenTelemetry 标准的分布式跟踪系统集成。这种集成允许您将跟踪与剖析数据关联起来,并查找跟踪 span 特定代码行的资源使用情况。
span 剖析仅支持 CPU 剖析类型。
支持以下语言