SYSTEM OBSERVABILITY · FOUR NUMBERS

进程显示304% CPU,机器却是92%:哪个数字才是真的?

它们都是真的,但回答的不是同一个问题。

✦ 当前脱敏样本

304.47% 原始进程CPU · 38.06% 归一化进程CPU · 92.5% 主机CPU · 78.2% 热点耗时贡献

本文概念卡片底图由AI生成并经确定性程序叠加中文;源码、测试与脱敏运行快照来自当前工作区。AI概念图不冒充真实监控界面。

四个CPU与耗时口径的技术文章封面

① 304%:这个进程大约用了3.04个逻辑核

在一次 Microi吾码 当前节点观测中,8个逻辑处理器上出现了304.47%的进程原始CPU。它不是机器“超载到三倍”。

原始口径:进程CPU时间增量 ÷ 墙钟时间增量 × 100。一个线程跑满一个逻辑核约为100%,三个线程并行就可能接近300%。
raw = ΔprocessCpuMilliseconds / ΔwallClockMilliseconds × 100
304.47% ≈ 3.04 个逻辑核
进程原始CPU与归一化CPU计算流程

② 38%:把进程放回整机容量里看

同一份 Microi吾码 源码把原始值再除以逻辑处理器数。当前节点有8个逻辑处理器,所以304.47% ÷ 8 ≈ 38.06%。

✓ 诊断使用Normalized

高进程CPU诊断阈值是归一化70%,而不是拿Raw值与70%直接比较。15/15相关自动测试已通过。

原始进程CPU归一化CPU主机CPU与耗时贡献四种口径

③ 92.5%:整台机器仍然可能很忙

进程归一化只有38%,不代表主机只有38%。主机CPU还包括其它进程、系统服务与内核活动。

  • 主机92.5%:全局确实接近饱和。
  • 当前API进程38.06%:它不是主机全部压力的来源。
  • 诊断方向:继续找其它进程或系统层负载,不能只优化当前API。
⚠ 两个数字可以同时成立

一个进程只占部分容量,而整台机器被其它工作推高,这是常见而非矛盾。

请求累计墙钟耗时贡献的计算方式

④ 78.2%:墙钟耗时贡献,不是CPU归因

系统把窗口内每次请求的 ElapsedMs 按路由相加,再除以窗口请求总耗时,得到 CostSharePercent

CostSharePercent = route.TotalElapsedMs / window.TotalElapsedMs × 100
等待数据库、网络、锁也会增加ElapsedMs

所以78.2%只说明这个热点值得优先排查,不能写成“它吃掉了78.2%的CPU”。

系统观测相关自动测试15项全部通过

⑤ 正确排查顺序不是盯着最大数字

  1. 确认核数:把Raw翻译成等效逻辑核。
  2. 看主机CPU:判断全局是否饱和。
  3. 看进程Normalized:判断当前进程压力。
  4. 看活动请求:识别并发堆积。
  5. 看热点贡献:缩小范围,再结合P95、GC、数据库与外部依赖。
从核数主机进程并发到热点的诊断链
◆ 证据边界

当前源码、官方文档、15/15自动测试与脱敏正式快照互相印证。快照仅代表当前API节点与当前5分钟窗口,不外推为整个集群长期结论。

AI素材披露:本文技术概念卡片底图由AI生成并经确定性程序叠加准确中文;长文信息图、源码分析与本地测试证据来自当前工作区,概念图不冒充运行证据。

Logo

宁波官方开源宣传和活动阵地,欢迎各位和我们共建开源生态体系!

更多推荐