压测中吞吐量骤降的诡异问题

2022-06-11 11:42:53 +08:00
 szzadkk

最近在给服务做压测,出现了一个诡异问题。服务部署在三台机器上,请求链路是 压测机 -> LB -> nginx -> 后端服务,其中 nginx 与后端服务同机部署,LB 将请求转发到 3 台机器的 nginx, 每台 nginx 再将请求转发到 3 台机器的后端服务,并且开启了 HTTP 长连接。服务是基于 Spring 的,server 用的 jetty 。

  1. 服务启动后,第一波压测,3500 并发,QPS 接近 5W ,RT 70ms ,此时都是正常的
  2. 停止压测机,开启了第二波压测,3000 并发,稳定后 QPS 降到 15000 左右,RT 上升到 200ms
  3. 检查后端服务监控,请求耗时正常,jstack 打印堆栈发现,jetty 中大量工作线程空闲. 检查 nginx 日志,耗时也正常
  4. 重新压测,QPS 仍然在 15000 左右,没有提升. 压测过程中重启 nginx ,稳定后 QPS 无变化,重启后端服务,QPS 无变化。停止压测后,重启后端服务,再次启动压测,QPS 恢复到 5w

想问下各位有没有遇到过类似的问题,或者有没有什么排查的思路,感激不尽

1965 次点击
所在节点    Java
6 条回复
wy315700
2022-06-11 12:02:26 +08:00
是不是 timewait 数量很高
Goooooos
2022-06-11 14:00:49 +08:00
重启后端能恢复的话,看看进程的 gc 情况,是不是有内存泄漏导致经常 fgc
Jooooooooo
2022-06-11 14:06:26 +08:00
先看下系统指标呗, gc, thread count, cpu busy 等等看看有无端倪.
szzadkk
2022-06-11 14:12:51 +08:00
@wy315700 是的,这也是我不理解的一个点,开启了长连接,按理说 TW 应该很少才对
zizon
2022-06-11 18:01:42 +08:00
jetty 工作线程空闲说明是业务逻辑繁忙呗.
压测过程重启无影响,停止压测 full cold restart 恢复说明可能是请求涉及的服务有外部抢占 /依赖资源之类的呗.

比如分布式锁 /队列,且看 1,2 描述可能跟 session 数相关(3500 -> 3500+3000 performance degraded)
szzadkk
2022-06-12 09:22:32 +08:00
各位的排查思路都尝试了一遍,检查服务没问题,最后发现是发压机的问题,三台机器有一台没工作....................

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/858868

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX