菜单
文档面包屑箭头 Grafana Pyroscope面包屑箭头 查看和分析性能分析数据面包屑箭头 理解“自用”与“总计”指标
开源

理解 Pyroscope 分析中的“自用”与“总计”指标

Pyroscope 中的性能分析提供了多种分析性能分析数据的方法。其中关键的部分是“自用”和“总计”指标,理解它们对于在 CPU 和内存上下文中准确解释性能分析数据至关重要。这些指标可以在 UI 的表格和火焰图视图中看到。

Self vs total annotated

自用

“自用”指直接归属于特定函数或代码片段的资源使用(CPU 时间、内存分配等),不包括其子函数或调用使用的资源

此指标有助于隔离特定代码块的直接影响,对于定位主要资源消耗者至关重要

Self vs total diagram

总计

“总计”包含一个函数及其所有调用函数合并的资源使用量

它提供了函数整体资源消耗的全面视图,对于理解累计影响至关重要

CPU 性能分析中的“自用”与“总计”

在 CPU 性能分析中,“自用”表示函数直接消耗的 CPU 时间,对于识别 CPU 需求高的函数至关重要。

“总计” CPU 时间包括函数本身以及所有被调用函数消耗的时间,强调全面的 CPU 使用情况

下面的示例演示了 CPU 密集型过程的简化伪代码表示。这说明了在典型应用中如何计算不同函数的“自用”和“总计”时间。下图提供了这些概念的视觉表示。

Self vs total diagram

python
def handle_request():
    # Root function representing the total request handling process
    parse_json()
    process_data()

def parse_json():
    # Function for parsing JSON data
    validate()

def validate():
    # Function for validating the parsed JSON schema
    # Schema validation logic

def process_data():
    # Function for processing data
    apply()

def apply():
    # Function for applying transformations to data
    # Transformation logic

# Simulate a request handling
handle_request()

内存性能分析中的“自用”与“总计”

  • 内存中的自用: 在内存性能分析中,“自用”测量函数本身分配的内存量,对于检测直接内存分配问题至关重要。
  • 内存中的总计: “总计”内存包括函数及其调用函数分配的内存量,对于评估整体内存占用至关重要。

CPU 性能分析部分中的同一示例可用于说明内存性能分析中“自用”和“总计”的概念,只是使用内存单位而不是 CPU。

结论

掌握“自用”和“总计”指标之间的区别,对于在 Pyroscope 中进行有效的性能分析至关重要。无论是在 CPU 性能分析还是内存性能分析(或任何其他类型)中,这些指标都能提供有价值的见解,用于优化应用、提升其效率和可靠性。