跳转至

Profiling


Profiling 通过对应用程序在 CPU、内存和 I/O 等方面的运行状态进行持续采样与数据采集,自动获取其性能剖析数据。采集到的数据通过火焰图进行实时可视化,清晰展示每一个方法、类和线程之间的调用堆栈关系与资源消耗占比,帮助开发者识别热点函数与效率瓶颈,为代码级性能优化提供数据支撑。

在 Profiling 查看器中,您可以:

  • 基于火焰图分析 Java、Python、Go、C/C++ 等不同语言应用的运行时动态性能数据,直观定位由低效算法、内存泄漏或不当 I/O 操作引起的性能问题;

  • 通过与链路(Trace)关联,获取到具体业务请求(Span)所对应的代码执行片段,实现从业务接口到具体方法的端到端性能追踪,精准定位优化方向。

前提条件

  1. 安装 DataKit
  2. 开启 Profiling 采集器

Profiling 数据上报后,您可通过查看器进行查询与分析,支持搜索筛选、快捷筛选、列自定义及数据导出等操作。

注意

Profiling 数据默认保存 7 天。

Profiling 详情页

性能

在详情页,自动进入“性能” tab 页,包含属性标签、性能火焰图以及运行信息。

火焰图

Profiling 的核心是利用火焰图进行代码级性能剖析。火焰图能直观展示调用栈中各方法的执行时间或资源消耗分布。系统同时提供基于方法、类库、线程等多个维度的聚合数据分析视图,直接列出执行占比最高的热点方法,帮助快速聚焦核心性能问题。

分析能力支持多种编程语言,不同语言可观测的指标维度有所不同,例如:

分类 说明
CPU Time 每个方法在 CPU 上的运行时间
Wall Time 每个方法的花费耗时,其中包含在 CPU 上运行的时间,等待 I/O 的时间以及函数运行时发生的其他任何事情所花费的时间
Heap Live Size 仍在使用中的堆内存数量
Allocated Memory 每个方法分配的堆内存数量,包括后来被释放的分配
Allocations 每个方法进行的堆分配数量,包括后来被释放的分配
Thrown Exceptions 每个方法抛出的异常数
Lock Wait Time 每个函数等待锁的时间
Locked Time 每个函数保持锁的时间
Lock Acquires 每个方法获得锁的次数
Lock Releases 每个方法释放锁的次数

|

分类

    | 说明     |
| --------------- | -------- |
| CPU Time                 | 每个方法在 CPU 上的运行时间,其中包含服务的 Java 字节码和运行时操作耗时,不包含通过 JVM 调用本地代码耗时 |
| Wall Time in Native Code | 本地代码的采样次数。当代码在 CPU 上运行、等待 I/O 以及方法运行时发生的任何其他情况,都可能发生采样。其中不包含运行应用代码时涉及到的 Java 字节码调用 |
| Allocations              | 每个方法进行的堆分配数量,包括后来被释放的分配             |
| Allocated Memory         | 每个方法分配的堆内存数量,包括后来被释放的分配             |
| Heap Live Objects        | 每个方法被分配到的存活对象数量                             |
| Thrown Exceptions        | 每个方法抛出的异常数量                                     |
| Lock Wait Time           | 每个方法等待锁的时间                                       |
| Lock Acquires            | 每个方法获得锁的次数                                       |
| File I/O Time            | 每个方法花在文件读取和写入的时间                          |
| File I/O Written         | 每个方法写入到文件的数据量统计                             |
| File I/O Read            | 每个方法从文件中读取的数据量统计                           |
| Socket I/O Read Time     | 每个方法花在从 socket 中读取的时间                         |
| Socket I/O Write Time    | 每个方法花在写入 socket 的时间                          |
| Socket I/O Read          | 每个方法从 socket 读取的数据量统计                         |
| Socket I/O Written       | 每个方法写到 socket 的数据量统计                         |
| Synchronization          | 每个方法花在同步上的时间                                  |

快捷操作

  • 搜索:在类型选择框中,输入方法名关键字进行模糊搜索,从匹配结果中直接选择,可快速定位并聚焦查看特定方法;
  • 复制:在维度下,hover 可复制查看方法详情;
  • 点击选择:维度列表默认展示全部方法。点击任一方法,火焰图将聚焦显示该方法的调用路径;支持多选以对比多个方法的执行情况。再次点击已选方法即可取消选择,恢复全景视图。

运行信息

运行信息 tab 页,可查看对应编程语言运行时的关联字段及标签属性,包括进程参数、环境变量及系统标签等字段。您可以将任一标签作为筛选条件添加到查看器列表面板,快速过滤相关数据;也可直接复制标签内容,用于在日志或链路中进行关联查询。

链路关联 Profiling

当应用程序同时开启了 APM 链路追踪与 Profiling 采集后,系统支持在链路(Trace)层面关联性能剖析数据。在应用性能监测的链路详情页中,选中火焰图上任何一个 Span,即可查看在该业务请求执行时间段内,关联的代码方法调用列表及其 Wall Time 的耗时占比。

由此实现从一次慢业务请求直接定位到具体耗时方法的穿透式分析,并支持一键跳转至完整的 Profiling 详情页,查看该时间段内更全面的性能剖析数据(如 CPU、内存维度),进行深度根因调查。

点击查看 Profiling 详情可跳转到对应 Profiling 详情页查看具体的性能数据。

文档评价

文档内容是否对您有帮助? ×