提交 4e19844c authored 作者: 陈泽健's avatar 陈泽健

docs(perf): 记录 Java 进程瞬时 CPU 监控修复会话进度到 HANDOFF

更新 HANDOFF_性能测试.md:记录 Batch B(JSTAT 瞬时 CPU 采样修复)背景、
修复方案、验证结果、5.60 部署与交接待办;更新最近提交/会话窗口/状态头
(指向 ad4163bb 已推送 origin/platform-auto-test)
Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
上级 ad4163bb
......@@ -2,10 +2,51 @@
> **生成时间**: 2026-08-31
> **当前分支**: `platform-auto-test`
> **最近提交**: `11e1dd85` style(frontend): Vue 模板占位符 JSON 示例引号转义(lint 合规)
> **会话窗口**: 性能测试 — 清理提交(HANDOFF 文档入库 + 4 个 Vue placeholder 转义修复),已推送 origin/platform-auto-test
> **状态**: ✅ 遗留 HANDOFF 文档更新已提交 `df34c1c8`;✅ Vue placeholder 引号转义修复已提交 `11e1dd85`;✅ 两 commit 均已推送 origin/platform-auto-test
> **会话窗口(上一窗口)**: AI 分析报告资源使用分析四维度增强(commit `c73ffd58`,已推送 + 部署 5.60 + 用户 2026-08-28 真实验收)
> **最近提交**: `ad4163bb` feat(perf): 目标机 Java 进程瞬时 CPU 采集 + 多实例服务级聚合与 MySQL 趋势(已同步 origin/platform-auto-test)
> **会话窗口**: 性能测试 — 修复 Java 进程 CPU 监控失真(ps 生命周期平均 → JSTAT 瞬时采样,实测与 top 的 300%+ 一致)+ 批前功能提交推送
> **状态**: ✅ Batch A(5 关键字 + 多 PID 聚合 + MySQL 趋势)与 Batch B(JSTAT 瞬时 CPU)均已实现、验证、部署 5.60,并合并提交 `ad4163bb` 推送 origin/platform-auto-test
> **会话窗口(上一窗口)**: 清理提交(HANDOFF 文档入库 + Vue placeholder 转义修复)`11e1dd85`
---
## ⚡ 最新会话更新(2026-08-31 收尾)— Java 进程 CPU 监控修复(JSTAT 瞬时采样)✅
### A. 会话背景
用户反馈:**java 监控不对,服务器上实际有些 java 服务的 cpu 都跑到 300 多了**。旧实现用 `ps -eo %cpu=`,而 ps %cpu 是进程自启动以来的**生命周期平均**:压测中途刚重启的 JVM 实际瞬时 CPU 已 300%+(top 口径,100% = 单核、多核可超 100%),ps 只显示 1-3%,严重低估。
### B. 修复方案(`backend/app/executors/target_resource_monitor.py`)
- `_SSH_CMD` 追加 `---JSTAT1---`/`---JSTAT2---` 两段:`/proc/<pid>/stat` 的 utime+stime 差值(`sed -E 's/^[0-9]+ \(.*\) //'` 去掉带括号的命令名后取第 12/13 字段),两次采样间隔 `sleep 0.2``_STAT_WINDOW`)。
- JSTAT1 段同时输出 `cores=`(/proc/cpuinfo 核数,回退 nproc/getconf)与 `clk=`(CLK_TCK)。
- `_parse_java_processes`:优先用 `instant_cpu% = (t2-t1)/clk/0.2*100`(top 口径,可超 100%),核数存在时上限 `cores*100` 防时钟异常,采样缺失/零差回退 ps %cpu;保留按关键字、comm/args、grep 过滤。
- `sample()` 新增 `cpuCores`/`clkTck` 字段(`_parse_jstat_meta` 解析)。
### C. 验证结果 ✅
| 验证项 | 结果 |
|--------|------|
| `python -m py_compile` | ✅ 通过 |
| 新增 `backend/tests/test_target_resource_monitor.py` | ✅ 15 passed(瞬时 CPU 计算 / 多 PID 独立 / ps 回退 / 单快照缺失回退 / 核数截断 / 无核数不截断 / 零差回退 / 四舍五入 / meta 解析 / 段落边界 / 关键字与 comm 过滤 / 具体优先于泛化 / 空输出) |
| 既有 `tests/test_target_resource_summary.py` | ✅ 7 passed |
| 既有 `tests/test_performance_executor.py` | ✅ 25 passed(无回归) |
| 5.44 实测 | ✅ 8 核、clk=100;6 个 Java 服务正常解析(压测时按瞬时口径可到 300%+) |
| 压测口径对照 | ✅ `while :` 忙循环实测每核 ≈100%(top 语义),目标机已清理无残留进程 |
### D. 部署 5.60 ✅
1. `scp target_resource_monitor.py``/data/third_party/plat-auto-test/backend/app/executors/`(volume 挂载)
2. `docker compose restart app``GET /health` = 200,容器日志 `Application startup complete`
3. 远端文件确认含 JSTAT1 逻辑(grep 命中 7 处)
### E. 本次会话待办(交接给下一窗口)
| # | 任务 | 优先级 | 说明 |
|---|------|--------|------|
| 1 | **端到端压测实测新口径** | P1 | 5.60 真实执行任务,压测期间在 MonitorPanel/报告页确认 Java CPU 能显示 300%+ 级别(旧实现仅 1-3%) |
| 2 | 遗留未提交文件 | — | `backend/scripts/probe_44_202.py``frontend/public/` 临时文件(未纳入提交);`backend/data/test_platform.db`(按约定不提交) |
---
## ⚡ 最新会话更新(2026-08-31)— 清理提交:HANDOFF 文档入库 + Vue placeholder 转义修复 ✅
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论