【每日一题】TPS 上不去但 CPU 很闲,先怀疑哪里(附参考答案)

题目:接口压测中,并发从 50 加到 200,TPS 从 300 涨到 320 后不再增长,平均响应时间从 160ms 涨到 620ms,错误率始终为 0。监控显示:应用服务器 CPU 利用率仅 30%,内存正常,网卡带宽利用率 < 10%,GC 无长停顿。最可能的瓶颈是?

A. 应用服务器 CPU 计算能力不足
B. 下游依赖成为串行等待点(数据库连接池不足/慢 SQL/第三方接口超时),线程大量处于 WAITING、BLOCKED
C. JVM 频繁 Full GC 导致 STW
D. 压测机网络带宽被打满

难度:高级
题型:笔试(单选)

:point_right:参考答案/答题要点:

B。

  • 判据:CPU 空闲 + RT 随并发近乎线性上升 + 错误率 0 + TPS 平台期,是典型的等待型瓶颈(利特尔法则:TPS = 并发数 / RT,RT 涨多少吞吐就涨不动多少)。
  • A、C、D 与监控数据直接矛盾:CPU 30% 不是计算瓶颈;GC 无长停顿;带宽 <10%。
  • 下一步动作(面试加分):连续 3 次线程 dump 看是否都卡在同一栈(JDBC/HttpClient getObject、parking)→ 看连接池 active/maxWait 与等待线程数 → DB 侧看慢 SQL、锁等待、threads_running → 全链路 trace 拆分段耗时,确认瓶颈在自身代码还是依赖。
  • 顺带区分:若表现为 TPS 抖动 + 错误率上升,多半是超时/线程池拒绝;若 CPU 100% 而 RT 稳定,才是算力或代码热点,上 Arthas profiler 火焰图。