通用性能分析编辑

Elastic 通用性能分析是一种全系统、始终开启、持续性能分析解决方案,无需代码插桩、重新编译、主机调试符号和服务重启。通用性能分析利用 eBPF 技术在 Linux 内核空间运行,以最小的开销以不显眼的方式仅捕获所需数据。有关通用性能分析的快速概述,请参阅 通用性能分析产品页面

在本页中,您将找到有关以下内容的信息

在 Kibana 中检查数据编辑

您可以在 可观测性 导航菜单中找到通用性能分析。单击 堆栈跟踪 下的 通用性能分析 将打开 堆栈跟踪视图

通用性能分析目前仅通过堆栈采样支持 CPU 性能分析。

堆栈跟踪 视图中,您可以获得所有数据的概述。您也可以在搜索栏中使用过滤查询,将您的数据切分成舰队的更详细部分。基于时间的过滤器和属性过滤器允许您检查数据部分,并深入了解您的基础设施的各个部分随时间推移消耗了多少 CPU。

有关切片数据的更多信息,请参阅 过滤,有关比较两个时间范围以检测性能改进或回归的更多信息,请参阅 差异视图

调试符号编辑

您的堆栈跟踪可以

  • 符号化,显示完整源代码的文件名和行号
  • 部分符号化
  • 未符号化

在以下屏幕截图中,您可以看到未符号化的帧显示文件名和行号,而是显示十六进制数字,例如 0x80d2f4<unsymbolized>

为未符号化的帧添加符号目前是一项手动操作。请参阅 为本机帧添加符号

profiling stacktraces unsymbolized

堆栈跟踪编辑

堆栈跟踪视图显示按线程、跟踪、主机、部署和容器分组的堆栈跟踪图表

profiling stacktraces default view
概述编辑

堆栈跟踪页面上的不同视图显示

  • 线程: 按进程的线程名称分组的堆栈跟踪
  • 跟踪: 未分组的堆栈跟踪
  • 主机: 按机器的主机名或 IP 地址分组的堆栈跟踪
  • 部署: 按容器编排(例如 Kubernetes ReplicaSetDaemonSetStatefulSet 名称)设置的部署名称分组的堆栈跟踪
  • 容器: 按主机代理发现的容器名称分组的堆栈跟踪

堆栈跟踪视图提供有价值的信息,您可以使用这些信息来

  • 发现跨多台机器部署的哪个容器使用最多的 CPU。
  • 发现运行在您的机器上的第三方软件带来的相对开销。
  • 检测跨线程的意外 CPU 峰值,并深入更小的时间范围,使用火焰图进行进一步调查。

堆栈跟踪根据收集的堆栈跟踪的来源进行分组。如果您主机代理部署正在分析未运行任何容器或容器编排器的系统,您可能会在容器和部署中找到空视图。在通用性能分析从主机代理正确接收数据的部署中,您应该始终在线程、主机和跟踪视图中看到图表。

浏览堆栈跟踪视图编辑

将鼠标悬停在每个堆叠条形图部分上并单击它们以显示详细信息。您可以安排图表以显示绝对值或相对百分比值。

在顶部图表下方,有一些单独的图表显示每个项目的单独趋势线

profiling stacktraces smaller graphs

每个单独图表右上角显示的百分比是每个时间段的出现次数相对于组中样本总数的相对数量。

显示的百分比与 CPU 使用率的百分比不同。通用性能分析并非旨在显示绝对监控数据。相反,它允许对基础设施中运行的软件进行相对比较(例如,哪个最昂贵?)。

单独的图表按从上到下、从左到右的降序排列。

跟踪 选项卡中,单击某个单独图表底部的 显示更多 将显示完整的堆栈跟踪。

profiling stacktraces show more

火焰图编辑

火焰图视图将层次数据(堆栈跟踪)分组到彼此堆叠或并排的矩形中。每个矩形的大小代表子项相对于其父项的相对权重。

profiling flamegraph view
概述编辑

火焰图提供有关哪些软件部分应首先搜索以进行优化机会的即时反馈,突出显示整个基础设施中最热的代码路径。

您可以使用火焰图来

  • 检测对与您自己的软件链接的系统调用或本机库的意外使用:通用性能分析能够跨用户空间边界展开堆栈跟踪到内核空间
  • 检查最 CPU 密集型应用程序的调用堆栈,检测热点代码路径并寻找优化机会
  • 查找“深层”调用堆栈,通常暗示跨类或对象存在许多间接调用
浏览火焰图视图编辑

您可以在水平和垂直轴上浏览火焰图

  • 水平轴:每个被采样的进程在 root 帧下至少有一个矩形。在通用性能分析火焰图中,您可能会发现存在您无法控制但正在消耗大量 CPU 资源的进程。
  • 垂直轴:遍历进程的调用堆栈允许您识别进程的哪些部分最常执行。这允许您查明应该可以忽略但实际上是调用站点很大一部分的函数或方法。

您可以向上、向下、向右或向左拖动图表以移动可见区域。

您可以通过单击单个帧或在彩色视图中向上滚动来放大和缩小堆栈跟踪的子集。

图表左下角的摘要方块允许您移动图表的可见区域。当您拖动火焰图时,右下角的摘要方块的位置会调整,移动摘要方块会调整较大面板中的可见区域。

将鼠标悬停在火焰图中的矩形上会在窗口中显示帧的详细信息。要查看更多帧信息,请在固定工具提示后单击 显示更多信息 图标。

profiling flamegraph detailed view

在图表区域下方,您可以使用搜索栏在火焰图中查找特定文本;在这里,您可以搜索二进制文件、函数或文件名,并在出现的位置移动。

函数编辑

函数视图显示通用性能分析最常采样的函数的有序列表。从这个视图中,您可以发现整个基础设施中运行最多的函数,应用过滤器以深入了解单个组件。

profiling functions default view

过滤编辑

在所有通用性能分析视图中,搜索栏接受 Kibana 查询语言 (KQL) 中的过滤器。

最值得注意的是,您可能希望过滤以下内容

  • profiling.project.idproject-id 主机代理标志的对应值,部署的主机代理的逻辑组
  • process.thread.name:进程的线程名称,例如 pythonjavakauditd
  • orchestrator.resource.name:编排器设置的容器化部署组的名称
  • container.name:容器引擎设置的单个容器实例的名称
  • host.namehost.ip:机器的主机名或 IP 地址(用于调试单个虚拟机上的问题)

差异视图编辑

火焰图和函数视图可以转换为差异视图,比较来自两个不同时间范围或跨多个维度的數據。

从顶部选项卡切换到 差异火焰图差异 TopN 函数 时,您会看到两个单独的搜索栏和日期时间选择器。最左边的过滤器代表您要用于比较的基线数据,而最右边的过滤器代表将与基线进行比较的数据。

每次数据过滤器刷新都会触发频率比较,突出显示 CPU 使用率的变化。

在差异函数中,最右侧的函数列包含绿色或橙色的分数计算器,代表位置的相对差异,作为 CPU 使用率最高的函数。

profiling functions differential view

在差异火焰图中,与基线的差异用颜色和色调突出显示。鲜绿色的矩形表示与基线相比,帧在更少的样本中出现,这意味着有所改进。鲜红色的矩形表示在 CPU 上记录的样本中,帧出现的次数更多,表明可能存在性能下降。

profiling flamegraph differential view

资源约束编辑

通用性能分析的关键目标之一是为用户带来净正成本效益:性能分析和观察应用程序的成本不应高于优化带来的节省。

本着这种精神,主机代理和存储都经过设计,以尽可能少地使用资源。

Elasticsearch 存储编辑

通用性能分析存储预算在每个性能分析核心基础上是可预测的。我们生成的数据,以 20 Hz 的固定采样频率,将以每天约 40 MB/核心的速度存储在 Elasticsearch 中。

主机代理 CPU 和内存编辑

由于通用性能分析提供全系统连续性能分析,因此主机代理的资源使用量与机器上运行的进程数量高度相关。

我们记录了真实世界中生产环境中的主机代理部署,其 CPU 时间消耗在 0.5% 到 1% 之间,进程内存低至 50 MB,在繁忙的主机上高达 250 MB。