标准答案

  1. 计算热点通常在 profile 中出现稳定的业务函数或算法栈,吞吐和输入规模有相关性。
  2. 自旋和锁竞争会出现大量线程在同步原语附近消耗 CPU,成功工作比例下降。
  3. 重试风暴表现为请求量、下游错误、客户端重试和业务重复操作同时上升。
  4. 先限流、关闭无效重试或降低非核心工作,再用 CPU profile、锁指标和调用链验证根因。

题目解析

CPU 接近 100% 先要判断这些 CPU 是否转化成有效业务工作。算法热点通常与输入量和成功吞吐相关,自旋和锁竞争会让 CPU 消耗增加但完成量下降,重试风暴则伴随下游错误和请求倍增。

采样 profile、线程状态、锁等待、GC、序列化和调用链重试记录要放在同一时间窗口分析。只看主机 CPU 平均值,无法区分一个高效计算热点和大量无效循环。

止血时可以暂停无效重试、降低非核心任务和限流,但长期方案要修复热点算法、锁粒度、单分片或调用链策略。扩容只有在工作可以分散且下游也有容量时才有效。

常见误区

  • 误区:看到 CPU 高就立即加机器。改正:先确认热点是否可横向分散,以及 CPU 是否被自旋、锁竞争或重试消耗。
  • 误区:只看平均 CPU 不看线程栈。改正:结合 profile、线程状态、GC 和锁指标定位具体消耗。
  • 误区:不先停止重试风暴就扩容。改正:先限制放大源和非核心工作,再评估扩容是否能提高有效吞吐。

作者信息