跳转到内容

运行时统计

runtime_stats 组件允许您收集和分析 ESPHome 设备中所有组件的运行时性能统计信息。这是一个强大的调试和优化工具,可帮助识别可能阻塞事件循环或消耗过多处理时间的组件。

WARNING

此组件旨在用于调试和故障排除。虽然可以在生产环境中临时启用它来诊断问题,但不应该长期启用,因为:

  • 统计收集会增加每次组件执行的开销
  • 它会增加内存使用以存储统计数据
  • 定期日志记录可能会使日志变得杂乱

需要时启用它来查找问题,调查完成后禁用它。

# 示例配置条目
runtime_stats:
log_interval: 60s
  • log_interval (可选, 时间):记录统计信息的频率。默认为 60s

    • 最小值为 1s
    • 设置得太低会增加日志垃圾信息

NOTE

运行时统计使用 millis() 进行时间测量,提供毫秒级分辨率。这意味着:

  • 执行时间少于 1ms 的组件将显示为 0ms
  • 非常快的操作无法准确测量
  • 统计数据最适合查找需要多个毫秒的组件

组件记录两种类型的统计数据:

周期统计 显示最近一个日志记录间隔的统计信息。用于识别瞬态性能问题。

总统计 显示启动以来的累计统计信息。用于了解整体系统行为。

对于每个组件,报告以下指标:

  • count:组件执行的次数
  • avg:平均执行时间(毫秒)
  • max:观察到的最大执行时间
  • total:总累计执行时间

组件按总执行时间(降序)排序,以首先突出影响最大的组件。

[09:55:52][I][runtime_stats:042]: 组件运行时统计
[09:55:52][I][runtime_stats:043]: 周期统计(最近 60000ms):
[09:55:52][I][runtime_stats:066]: wifi: count=60, avg=0.50ms, max=5ms, total=30ms
[09:55:52][I][runtime_stats:066]: api: count=120, avg=0.01ms, max=1ms, total=1ms
[09:55:52][I][runtime_stats:066]: sensor: count=600, avg=0.00ms, max=1ms, total=2ms
[09:55:52][I][runtime_stats:070]: 总统计(启动以来):
[09:55:52][I][runtime_stats:084]: wifi: count=600, avg=0.45ms, max=5ms, total=270ms
[09:55:52][I][runtime_stats:084]: api: count=1200, avg=0.01ms, max=1ms, total=12ms
[09:55:52][I][runtime_stats:084]: sensor: count=6000, avg=0.00ms, max=1ms, total=20ms

识别阻塞组件 查找具有高 max 时间的组件。这些可能会阻塞事件循环并导致其他组件出现问题。

优化目标 具有高 total 时间的组件是优化的良好候选,特别是如果它们执行频繁。

性能回归测试 比较更改前后的统计信息,以确保性能没有下降。

排查时序问题 如果组件错过截止时间或行为异常,运行时统计可以帮助识别原因。

  1. 从默认间隔开始:60 秒的默认值在详细程度和日志量之间提供了良好的平衡。

  2. 关注异常值:执行时间明显高于其他组件的组件通常是最佳的优化目标。

  3. 考虑执行频率:一个耗时 1ms 但每分钟运行 1000 次的组件比一个耗时 10ms 但每分钟运行一次的组件影响更大。

  4. 注意模式:执行时间随时间增加可能表示内存泄漏或资源耗尽。

  5. 完成后禁用:调试完成后,始终删除或注释掉 runtime_stats 组件。