Profile¶
简介¶
Profile 支持采集使用 Java / Python 等不同语言环境下应用程序运行过程中的动态性能数据,帮助用户查看 CPU、内存、IO 的性能问题。
前提条件¶
数据查询与分析¶
Profile 数据上报到观测云工作空间以后,您可以通过 Profile 实时数据查看器了解您的程序代码性能。支持对 Profile 数据进行查询和分析,包括搜索与筛选、快捷筛选、添加显示列、数据导出等。
注意:Profile 数据默认保存 7 天。
时间控件¶
观测云查看器默认展示最近 15 分钟的数据,通过右上角的「时间控件」,您可以选择数据展示的时间范围。更多详情可参考文档 时间控件说明 。
搜索和筛选¶
在查看器搜索栏,支持关键字搜索、通配符搜索、关联搜索等多种搜索方式,支持通过 标签/属性
进行值的筛选,包括正向筛选、反向筛选、模糊匹配、反向模糊匹配、存在和不存在等多种筛选方式。更多搜索与筛选可参考文档 查看器的搜索和筛选 。
快捷筛选¶
在查看器快捷筛选,支持编辑“快捷筛选”,添加新的筛选字段。添加完成后,可以选择其字段值进行快捷筛选。更多快捷筛选可参考文档 快捷筛选 。
自定义显示列¶
在 Profile 查看器,默认查看“发生时间”、“服务名”、“环境”、“版本”、“主机”、“语言”以及“持续时间”,可通过「显示列」自定义添加、编辑、删除、拖动显示列。当鼠标悬停查看器显示列上时,点击「设置」按钮,支持对显示列进行升序、降序、向左移动列、向右移动列、向左添加列、向右添加列、替换列、添加到快捷筛选、添加到分组、移除列等操作。更多自定义显示列可参考文档 显示列说明 。
数据导出¶
在 Profile 查看器,您可以先筛选出想要的数据导出后进行查看和分析,支持导出到 CSV 文件、仪表板和笔记。
Profile 性能分析¶
点击 Profile 列表可查看对应的性能详情,包含属性标签、性能火焰图以及运行信息。
火焰图和维度数据分析¶
Profile 利用火焰图分析不同类型下代码方法级别的 CPU、内存或 IO 的使用情况,您可以非常直观的了解方法的执行性能和调用情况。同时 Profile 提供基于方法、库、线程等维度情况下的执行数据分析查看,更直观的显示执行占比较大的一些方法,更快的定位性能问题。
分类 | 说明 |
---|---|
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 | 每个方法花在同步上的时间。 |
快捷操作说明¶
- 搜索:您可以通过在「类型」右侧的选择框,输入关键字进行模糊搜索,选择框会列出匹配到的方法,直接选择您所需要查看的方法即可;
- 复制:您可以在「维度」通过鼠标悬停复制查看方法详情;
- 点击选择:「维度」默认全选,您可以点击选择查看一个或多个方法及其相关的火焰图信息。再次点击方法,即可恢复全选;
运行信息¶
在 Profile 详情页,点击查看「运行信息」,可以查看对应编程语言运行时的一些信息以及标签属性。支持将标签信息添加到查看器列表做筛选使用,支持复制标签内容进行查询搜索。
链路关联 Profile¶
当应用程序使用 ddtrace 采集器同时开启了 APM 链路追踪和 Profile 性能追踪数据采集后,观测云提供 Span 级别的关联查看分析。在应用性能监测的链路详情页,选中火焰图的 Span ,获取对应时间段的代码热点信息,直接查看该段时间内的代码方法调用列表和 Wall Time 的执行耗时和占比信息。方法列表支持递归查看方法调用的先后顺序以及执行时间情况。
点击「查看 Profile 详情」可跳转到对应 Profile 详情页查看具体的性能数据。