跳到主要内容

诊断

eBPF剖析

eBPF是一种强大的内核技术,允许在不修改内核源代码的情况下,动态地在内核中运行沙箱程序。在应用性能监控领域,eBPF持续剖析功能能够实时捕捉应用程序中的性能瓶颈,包括CPU、IO的使用,帮助开发者通过详细的分析找到性能瓶颈,从而优化程序、降低延迟、增加吞吐量、节约成本。

  • On-CPU:表示在CPU上执行的时间,即函数实际消耗的CPU时间,帮助识别CPU消耗较大的函数。
  • Off-CPU:表示等待CPU时间,分析在 I/O、锁、计时器、分页/交换等阻塞时等待的时间,适用于分析线程阻塞或调度瓶颈。

新建剖析

  1. 进入诊断轻应用,单击右上角的新建剖析按钮,弹出新建剖析页。
  2. 选择本次剖析的类型、进程、采集频率和持续时间:
    • 剖析类型: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 的调试机制)
  • 以下版本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

png

剖析列表

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

png

剖析详情

png

线程图

默认显示每个线程组的On-CPU、Off-CPU消耗的时间,展开线程组可查看每个线程的耗时。支持单击线程组/线程查看对应的火焰图。

png

剖析结果

On-CPU 剖析
  1. On-CPU 剖析记录每个函数实际使用的 CPU 时间,帮助识别 CPU 消耗较大的函数或模块。

  2. 显示:

    • 火焰图:展示各个函数的 CPU 占用情况,颜色宽度表示函数执行的相对时间。
    • tooltips:鼠标悬停在函数上时,显示该函数的总时间占比、独占时间占比等。
    • 支持以火焰图、列表、火焰图和列表同时显示三种方式显示剖析详情。

    png

Off-CPU 剖析
  1. Off-CPU 剖析记录函数在等待 CPU 资源时所花费的时间,适用于分析线程阻塞或调度瓶颈。

  2. 显示:

    • 火焰图:展示各个函数的等待 CPU 时间,帮助找出可能的线程阻塞点
    • tooltips:鼠标悬停在函数上时,显示该函数的总时间占比、独占时间占比等。
    • 支持以火焰图、列表、火焰图和列表同时显示三种方式显示剖析详情。

    png

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