诊断
eBPF剖析
eBPF是一种强大的内核技术,允许在不修改内核源代码的情况下,动态地在内核中运行沙箱程序。在应用性能监控领域,eBPF持续剖析功能能够实时捕捉应用程序中的性能瓶颈,包括CPU、IO的使用,帮助开发者通过详细的分析找到性能瓶颈,从而优化程序、降低延迟、增加吞吐量、节约成本。
- On-CPU:表示在CPU上执行的时间,即函数实际消耗的CPU时间,帮助识别CPU消耗较大的函数。
- Off-CPU:表示等待CPU时间,分析在 I/O、锁、计时器、分页/交换等阻塞时等待的时间,适用于分析线程阻塞或调度瓶颈。
新建剖析
- 进入诊断轻应用,单击右上角的新建剖析按钮,弹出新建剖析页。
- 选择本次剖析的类型、进程、采集频率和持续时间:
- 剖析类型:On-CPU、Off-CPU,支持同时选择。
- 选择进程:支持选择最近30分钟活跃的进程,支持根据主机IP、主机名称、应用名称、实例名称等过滤进程。
- 采集配置:默认采集频率50次/秒,持续时间是1分钟。
注意:
- 仅支持UniAgent 4.2.0.0+、Kubernetes UniAgent 4.2.0.0+。
- 内核版本:x86架构需4.19+,arm64架构需5.5+。
- 不支持Nginx、PHP语言的进程。
- JDK版本要求(需支持Serviceability Agent),
- 支持以下 JDK 类型与版本:
- OpenJDK 1.7+
- Oracle JDK(HotSpot)、 Adoptium 等主流发行版
- 不支持以下类型与版本:
- JDK1.5、JDK1.6(未内置 SA 支持)
- IBM JDK(架构不同,SA 不兼容)
- Oracle JRockit(JRockit 为独立实现,不兼容 HotSpot 的调试机制)
- 支持以下 JDK 类型与版本:
- 以下版本Linux进行eBPF剖析时可能存在问题:
- 有缺陷的版本:6.1.x ,修复版本:6.1.36
- 有缺陷的版本:6.3.x ,修复版本:6.3.10
- 有缺陷的版本:5.19及5.19以上5.x,6.0.x和6.2.x ,修复版本:6.3.1

剖析列表
剖析列表显示所选时间范围的剖析结果,单击ID进入剖析详情查看剖析结果。

剖析详情

线程图
默认显示每个线程组的On-CPU、Off-CPU消耗的时间,展开线程组可查看每个线程的耗时。支持单击线程组/线程查看对应的火焰图。
剖析结果
On-CPU 剖析
-
On-CPU 剖析记录每个函数实际使用的 CPU 时间,帮助识别 CPU 消耗较大的函数或模块。
-
显示:
- 火焰图:展示各个函数的 CPU 占用情况,颜色宽度表示函数执行的相对时间。
- tooltips:鼠标悬停在函数上时,显示该函数的总时间占比、独占时间占比等。
- 支持以火焰图、列表、火焰图和列表同时显示三种方式显示剖析详情。

Off-CPU 剖析
-
Off-CPU 剖析记录函数在等待 CPU 资源时所花费的时间,适用于分析线程阻塞或调度瓶颈。
-
显示:
- 火焰图:展示各个函数的等待 CPU 时间,帮助找出可能的线程阻塞点
- tooltips:鼠标悬停在函数上时,显示该函数的总时间占比、独占时间占比等。
- 支持以火焰图、列表、火焰图和列表同时显示三种方式显示剖析详情。

注意:Off-CPU火焰图,根节点root的总时间可能超过剖析时间,总时间为每个线程的时间之和。例如:当前进程有10个线程,剖析时间为1分钟,根节点的总时间为10分钟。