【每日一题】压测 TPS 上不去但 CPU/内存都不高(附参考答案)

题目:用 JMeter 压接口,加到目标并发后 TPS 卡住不再上涨,但被测服务的 CPU、内存都很低。你会怎么定位瓶颈?(口述)

难度:高级
题型:面试口述题

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

  • 先怀疑压测机自身:施压线程数是否够、连接数/端口是否耗尽、网卡带宽、TIME_WAIT 堆积、压测脚本里有 Think Time/集合点/同步日志、参数化文件读取加锁。判断依据:压测机 CPU/网络是否先满。
  • 区分客户端 RT 与服务端 RT:看 JMeter 聚合报告的连接时间/响应时间拆分;若"连接时间"就很长,多半是压测机或网络问题,别冤枉被测端。
  • 看 CPU 之外的被测端资源:数据库连接池打满、行锁/表锁、线程池队列满、下游依赖 RT 变高、GC 停顿、磁盘 IO、限流熔断触发——这些都不体现在 CPU 上却直接压低吞吐(Little’s Law:并发=吞吐×RT,RT 变大 TPS 自然上不去)。
  • 网络链路:压测机与被测服务是否跨机房/跨可用区,RTT 与带宽是否成瓶颈。
  • 长连接/复用:HTTP keep-alive 是否开启,连接池 size 是否过小导致频繁建连。
  • 定位手段:分段计时 + 全链路 trace、服务端线程栈/火焰图、DB 慢查询与锁等待、连接池监控指标;逐步加压观察 RT 与 TPS 拐点。