菜单
文档breadcrumb arrow Grafana Tempobreadcrumb arrow 故障排除breadcrumb arrow 内存不足错误
开源

排除内存不足错误

了解内存不足 (OOM) 问题以及如何排除故障。

设置最大属性大小有助于控制内存不足错误

当获取包含具有非常大属性的 Span 的追踪时,Tempo Querier 可能会耗尽内存。在使用 tracebyID 端点获取单个追踪时已观察到此问题。

为了避免这些内存不足崩溃,请使用 max_span_attr_byte 限制任何单个属性允许的最大大小。任何超出配置限制的键或值在存储前会被截断。

使用 tempo_distributor_attributes_truncated_total 指标跟踪有多少属性被截断。

yaml
   # Optional
    # Configures the max size an attribute can be. Any key or value that exceeds this limit will be truncated before storing
    # Setting this parameter to '0' would disable this check against attribute size
    [max_span_attr_byte: <int> | default = '2048']

请参考分发器配置文档了解更多信息。

最大追踪大小

长时间运行(几分钟或几小时)或大型(10 万 - 100 万个 Span)的追踪在被遇到时会急剧增加每个组件的内存使用量。这是因为 Tempo 将追踪视为单个单元,并将追踪的所有数据保存在一起,以实现结构化查询和分析等功能。

读取大型追踪时,可能会急剧增加读取组件的内存使用量

  • query-frontend
  • querier
  • ingester
  • metrics-generator

写入大型追踪时,可能会急剧增加写入组件的内存使用量

  • ingester
  • compactor
  • metrics-generator

从较小的追踪大小限制 15MB 开始,并根据需要增加。平均 Span 大小为 300 字节时,这将允许每个追踪包含 5 万个 Span。

务必确保已配置限制,建议的最大限制为 60 MB。

在每个租户的覆盖配置中配置限制

yaml
overrides:
    'tenant123':
        max_bytes_per_trace: 1.5e+07

请参考 [覆盖配置](# https://grafana.org.cn/docs/tempo/<TEMPO_VERSION>/configuration/#standard-overrides) 文档了解更多信息。

大型属性

非常大的属性(10KB 或更长)在被遇到时会急剧增加每个组件的内存使用量。Tempo 的 Parquet 格式使用字典编码列,这对于重复值非常有效。然而,对于非常大且高基数的属性,这可能需要大量内存。

大型属性的常见来源是以下领域的自动插桩

读取这些属性时,可能会急剧增加读取组件的内存使用量

  • query-frontend
  • querier
  • ingester
  • metrics-generator

写入这些属性时,可能会急剧增加写入组件的内存使用量

  • ingester
  • compactor
  • metrics-generator

您可以自动限制属性大小,使用 [max_span_attr_byte](( https://grafana.org.cn/docs/tempo/<TEMPO_VERSION>/configuration/#set-max-attribute-size-to-help-control-out-of-memory-errors)。您还可以使用这些选项

  • 手动更新应用插桩以移除或限制这些属性
  • 使用属性处理器在追踪 Pipeline 中丢弃属性