运行时统计
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 时间的组件是优化的良好候选,特别是如果它们执行频繁。
性能回归测试 比较更改前后的统计信息,以确保性能没有下降。
排查时序问题 如果组件错过截止时间或行为异常,运行时统计可以帮助识别原因。
有效使用技巧
Section titled “有效使用技巧”-
从默认间隔开始:60 秒的默认值在详细程度和日志量之间提供了良好的平衡。
-
关注异常值:执行时间明显高于其他组件的组件通常是最佳的优化目标。
-
考虑执行频率:一个耗时 1ms 但每分钟运行 1000 次的组件比一个耗时 10ms 但每分钟运行一次的组件影响更大。
-
注意模式:执行时间随时间增加可能表示内存泄漏或资源耗尽。
-
完成后禁用:调试完成后,始终删除或注释掉 runtime_stats 组件。