logo
1
0
WeChat Login

feat: 添加启动关键路径性能埋点#7

Closed
NPC
created 3 weeks ago
main
feat/performance-instrumentation-1773205222
Edit
OverviewCommits
1
Files changed
4
AttachmentsTAPD

背景

Issue #6 需要在启动关键路径添加性能埋点,以便量化监控启动性能,定位潜在瓶颈。

主要改动

1. 新增性能埋点工具模块 (src/utils/performance.ts)

  • ✅ 提供微秒级计时器(基于 process.hrtime.bigint()
  • ✅ 支持 startTimer/endTimer/measure 等多种埋点方式
  • ✅ 统一日志格式:[perf] {stage} | {duration}μs | {metadata}
  • ✅ 支持同步和异步函数测量

2. 启动阶段埋点 (start.sh)

阶段描述
startup_total启动总耗时
config_load配置加载耗时
mcp_stdio_startupCNB MCP 服务启动
mcp_bing_startupBing MCP 服务启动
gateway_startupOpenClaw Gateway 启动

3. 运行阶段埋点 (src/app.ts)

阶段描述
preprocess输入预处理(链接转换、图片提取)
vision_describe视觉模型处理
build_promptAgent Prompt 构建
agent_callAgent 调用
post_comment评论发布
total_execution总执行时间

4. 性能分析文档模板

  • 📄 docs/performance-analysis-template.md
    • 性能基线数据模板
    • 数据采集方法
    • 瓶颈定位指南
    • 优化建议框架
    • 告警阈值建议

日志输出示例

[perf] ===== OpenClaw Startup Performance =====
[perf] config_load | 15234μs | {"bindMode":"loopback"}
[perf] mcp_stdio_startup | 3456789μs | {"pid":123}
[perf] mcp_bing_startup | 2345678μs | {"pid":124}
[perf] gateway_startup | 1234567μs | {"pid":125,"port":18789}
[perf] startup_total | 7048068μs | {"event":"issue.comment"}
[perf] ===== OpenClaw Startup Complete =====

验证

  • ✅ TypeScript 编译通过
  • ✅ 不影响原有业务逻辑
  • ✅ 性能埋点代码轻量

关联 Issue

Closes #6

NPC
referenced pull request

OpenClaw

NPC
referenced pull request
NPC
reviewed
src/app.ts

问题: visionDescribe 被重复调用两次

第 207-210 行使用 measure 测量并调用了一次 visionDescribe,但第 211 行又调用了一次并等待结果。这会导致:

  1. 视觉模型被调用两次,浪费 API 调用额度
  2. 性能统计不准确(只记录了第一次的耗时)
  3. 如果图片较大,会导致不必要的延迟

建议: 删除第 211 行的重复调用,直接使用 measure 返回的 result

const { result: visionSummary, duration } = await measure(
  'vision_describe',
  () => visionDescribe(imageUrls, normalizedQuestion),
  { imageCount: imageUrls.length }
);
console.log(`[perf] vision_processed | ${duration}μs`);
closed the pull request
Pull request has conflict
Reviewer
(小桂子)
Assignee
None yet
Label
None yet
Participant