Skip to content

性能自动调优

版本: v1.0.0+ | 实时监控 | 规则引擎 | 参数自动调整 | 负载预测

概述

性能自动调优系统通过 6 阶段 AI 管道追踪(意图识别、任务规划、工具执行、RAG 检索、LLM 调用、完整管道)持续监控应用性能指标,并基于规则引擎自动调整配置参数。系统内置 5 条调优规则(数据库慢查询、碎片清理、LLM 高延迟、内存压力、P2P 连接数),支持冷却期防抖和 500 条历史回溯。

性能自动调优系统持续监控应用性能指标,通过规则引擎自动调整配置参数,确保最优运行状态。

核心特性

  • 📊 6 阶段管道追踪: 从意图识别到完整管道,全链路性能监控与百分位统计(P50/P90/P95/P99)
  • 🔍 瓶颈自动识别: 实时检测性能瓶颈,自动生成优化建议
  • ⚙️ 5 条内置规则: 数据库慢查询、数据库碎片、LLM 高延迟、内存压力、P2P 连接数自动调优
  • ❄️ 冷却期防抖: 每条规则 10 分钟冷却期,避免频繁调优震荡
  • 📈 调优历史记录: 完整记录每次调优动作,支持 500 条历史回溯

系统架构

性能数据源


┌──────────────────────┐
│  PerformanceMonitor   │
│  (6阶段管道追踪)      │
│  ├─ intent_recognition│
│  ├─ task_planning     │
│  ├─ tool_execution    │
│  ├─ rag_retrieval     │
│  ├─ llm_calls         │
│  └─ total_pipeline    │
└──────────┬───────────┘
           │ 指标采集 (每5分钟)

┌──────────────────────┐
│     AutoTuner         │
│  ┌────────────────┐  │
│  │   规则引擎      │  │
│  │ (5内置+自定义)  │  │
│  └───────┬────────┘  │
│          ▼           │
│  ┌────────────────┐  │
│  │ 冷却期检查     │  │
│  └───────┬────────┘  │
│          ▼           │
│  ┌────────────────┐  │
│  │ 调优动作执行   │  │
│  └────────────────┘  │
└──────────────────────┘

系统概述

双层架构

性能系统
├─ PerformanceMonitor (监控层)
│   ├─ 6 阶段 AI 管道性能追踪
│   ├─ 百分位统计 (P50/P90/P95/P99)
│   ├─ 瓶颈识别
│   └─ 优化建议生成
└─ AutoTuner (调优层)
    ├─ 规则引擎(内置 + 自定义规则)
    ├─ 冷却期防抖
    ├─ 调优历史记录
    └─ 自动参数调整

性能监控

追踪的管道阶段

阶段说明警告阈值危险阈值
intent_recognition意图识别可配置可配置
task_planning任务规划可配置可配置
tool_execution工具执行可配置可配置
rag_retrievalRAG 检索可配置可配置
llm_callsLLM 调用可配置可配置
total_pipeline完整管道可配置可配置

统计指标

每个阶段统计:
├─ 平均耗时 (Mean)
├─ P50 (中位数)
├─ P90
├─ P95
├─ P99
├─ 最小值 / 最大值
├─ 调用次数
└─ 异常比例

瓶颈识别

系统自动识别管道中的性能瓶颈并生成优化建议:

瓶颈分析:
  RAG 检索阶段 P95 = 2500ms (警告)
  → 建议: 优化向量索引, 减少检索文档数量
  → 建议: 启用 BM25 预过滤减少候选集

自动调优

内置规则

规则触发条件调优动作冷却期
db-slow-queries数据库查询慢增大 SQLite 缓存,启用 WAL10分钟
db-vacuum数据库碎片多执行 VACUUM10分钟
llm-high-latencyLLM 响应慢缩小上下文窗口10分钟
memory-pressure内存压力大触发 GC,发出警告10分钟
p2p-connectionsP2P 连接数过多降低连接上限10分钟

规则引擎配置

json
{
  "autoTuner": {
    "evaluationIntervalMs": 300000,
    "cooldownMs": 600000,
    "maxHistoryEntries": 500,
    "rules": [
      {
        "name": "custom-rule",
        "condition": "metrics.cpuUsage > 80",
        "action": "reduceParallelism",
        "cooldownMs": 300000
      }
    ]
  }
}

调优流程

1. 定期采集性能指标(默认每 5 分钟)
2. 评估所有规则条件
3. 条件满足 → 检查冷却期
4. 冷却期已过 → 执行调优动作
5. 记录调优历史
6. 发出事件通知

数据库表

performance_metrics

字段类型说明
idINTEGER主键
phaseTEXT管道阶段
durationREAL耗时(毫秒)
metadataTEXT附加信息(JSON)
session_idTEXT会话 ID
created_atDATETIME记录时间

关键文件

文件职责
src/main/monitoring/performance-monitor.js性能监控器(6 阶段追踪)
src/main/performance/auto-tuner.js自动调优引擎(规则引擎)
src/main/performance/performance-monitor.js性能数据采集器

使用示例

查看性能瓶颈

  1. 打开「性能调优」页面,查看 6 阶段管道统计
  2. 关注 P95/P99 延迟超过阈值的阶段(标红显示)
  3. 系统自动生成优化建议(如"优化向量索引")
  4. 按建议调整配置后观察指标变化

配置自动调优规则

  1. 在配置文件中添加自定义调优规则
  2. 设置触发条件(如 metrics.cpuUsage > 80)和调优动作
  3. 配置冷却期防止频繁调优(推荐 5-10 分钟)
  4. 规则引擎每 5 分钟自动评估并执行

查看调优历史

  1. 切换到「调优历史」标签页
  2. 查看每次自动调优的触发规则、执行动作和效果
  3. 分析调优趋势,识别反复触发的规则
  4. 根据历史数据优化规则参数

故障排查

问题可能原因解决方案
性能数据未采集监控模块未初始化重启应用,确认 PerformanceMonitor 已加载
自动调优不触发冷却期未过或条件未满足检查冷却期配置(默认 10 分钟),确认指标达到阈值
调优后性能反而下降规则动作不适合当前场景调整规则条件和动作,增大冷却期避免震荡
P99 延迟持续偏高系统整体负载过重排查资源瓶颈(CPU/内存/磁盘),考虑扩容
历史记录超过 500 条调优频率过高增大评估间隔和冷却期,减少不必要的调优
数据库慢查询规则误触发阈值设置过低根据实际业务场景调整慢查询阈值

配置参考

完整配置项

.chainlesschain/config.json 中配置:

json
{
  "performanceTuning": {
    "monitor": {
      "enabled": true,
      "evaluationIntervalMs": 300000,
      "retentionDays": 30,
      "stages": {
        "intent_recognition": { "warnMs": 200, "criticalMs": 500 },
        "task_planning":      { "warnMs": 500, "criticalMs": 1000 },
        "tool_execution":     { "warnMs": 2000, "criticalMs": 5000 },
        "rag_retrieval":      { "warnMs": 1500, "criticalMs": 3000 },
        "llm_calls":          { "warnMs": 5000, "criticalMs": 15000 },
        "total_pipeline":     { "warnMs": 8000, "criticalMs": 20000 }
      }
    },
    "autoTuner": {
      "enabled": true,
      "cooldownMs": 600000,
      "maxHistoryEntries": 500,
      "rules": {
        "db-slow-queries":  { "enabled": true, "thresholdMs": 100 },
        "db-vacuum":        { "enabled": true, "fragmentRatio": 0.3 },
        "llm-high-latency": { "enabled": true, "p95ThresholdMs": 10000 },
        "memory-pressure":  { "enabled": true, "heapUsageRatio": 0.85 },
        "p2p-connections":  { "enabled": true, "maxConnections": 50 }
      },
      "customRules": []
    }
  }
}

环境变量

变量默认值说明
PERF_MONITOR_INTERVAL_MS300000指标采集间隔(毫秒)
PERF_TUNER_COOLDOWN_MS600000调优规则冷却期(毫秒)
PERF_TUNER_MAX_HISTORY500最大历史记录条数
PERF_LLM_LATENCY_THRESHOLD_MS10000LLM 高延迟触发阈值
PERF_DB_SLOW_QUERY_THRESHOLD_MS100数据库慢查询触发阈值

性能指标

基准测试结果

测试环境:Intel Core i7-12700K / 32GB RAM / NVMe SSD / Windows 10 Pro

指标典型值P95 值目标上限
意图识别延迟45 ms120 ms200 ms
任务规划延迟180 ms420 ms500 ms
RAG 检索延迟(10 文档)320 ms890 ms1500 ms
LLM 调用延迟(qwen2:7b)1800 ms4200 ms5000 ms
完整管道端到端延迟2800 ms6500 ms8000 ms
指标采集开销< 1 ms< 3 ms< 5 ms
规则引擎评估耗时(5 规则)< 2 ms< 5 ms< 10 ms

内存占用

组件空闲内存峰值内存
PerformanceMonitor~2 MB~8 MB
AutoTuner(500 历史)~4 MB~12 MB
性能指标数据库~10 MB~50 MB

调优效果

内置规则在典型场景下的实测改善效果:

规则改善场景平均改善幅度
db-slow-queries启用 WAL 后高并发写入延迟降低 40%
db-vacuum碎片率 > 30% 时执行 VACUUM查询提速 15%
llm-high-latency缩小上下文窗口后响应加速延迟降低 25%
memory-pressureGC 触发后内存回收堆降低 30%
p2p-connections降低连接上限后网络稳定性提升丢包减少 20%

测试覆盖率

测试文件

测试文件测试数覆盖模块
tests/unit/monitoring/performance-monitor.test.js246 阶段追踪、百分位统计
tests/unit/performance/auto-tuner.test.js31规则引擎、冷却期、历史记录
tests/unit/performance/auto-tuner-rules.test.js185 条内置规则触发与执行
tests/unit/performance/performance-monitor.test.js12数据采集与持久化
tests/integration/performance/tuner-monitor.test.js9监控→调优端到端联动

总计: 94 个测试

覆盖率摘要

模块语句覆盖率分支覆盖率函数覆盖率
performance-monitor.js96%91%100%
auto-tuner.js94%89%100%

运行测试

bash
# 单元测试
cd desktop-app-vue && npx vitest run tests/unit/performance/

# 集成测试
cd desktop-app-vue && npx vitest run tests/integration/performance/

# 全部性能模块测试
cd desktop-app-vue && npx vitest run tests/unit/monitoring/ tests/unit/performance/ tests/integration/performance/

安全考虑

  • 只读监控: 性能监控仅采集指标数据,不修改业务逻辑
  • 调优范围限制: 自动调优仅调整预定义的配置参数,不执行任意命令
  • 冷却期防抖: 每条规则设有冷却期,防止快速连续调优导致系统不稳定
  • 历史审计: 所有调优动作完整记录,支持回溯和问责
  • 权限控制: 调优规则的增删改需要管理员权限
  • 指标数据保护: 性能指标存储在加密数据库中,防止信息泄露
  • 资源保护: 调优动作不会超出系统安全边界(如不会关闭安全模块)

相关文档

基于 MIT 许可发布