用 wrk 和 ab 给 NIO 做压测的时候, selector 卡死了

2021-04-29 21:02:23 +08:00
 Joker123456789
不知道各位大神有没有遇到过这个问题。

用 wrk 或者 ab 给 NIO 做压测,第一轮没什么问题,但是如果第一轮结束后 立刻进行第二轮,第三轮,第四轮, 很快就会出现卡死的情况。 尤其是 wrk,测试结果一轮比一轮惨,惨到极致后又恢复到第一轮的水准。 ab 倒是挺稳的,就是连续多轮后会卡死

已经排查过自己的程序了,卡死期间: 队列 0 积压,CPU 占用也为 0.

在 selector 的循环中 试过打印一段文字,当卡死的情况发生时,这段文字也不打印了,所以初步怀疑是 selector 卡死了。

出现的原因 也大概在两个点:

1. 我的电脑太烂了,可能承受不了这么多的连接频繁访问。
2. 读 channel 的时候卡死了,目前我是读到 read 返回 0 为止,理论上不会卡的。而且如果出现空转了,cpu 不应该为 0.

一头雾水,求各位大神给个排查的思路。

以下是测试的命令

wrk: ./wrk -c 100 -t 3 -d 3s http://127.0.0.1:8080/json
ab: ab -c 100 -n 1000 http://127.0.0.1:8080/json
1695 次点击
所在节点    Java
3 条回复
mightofcode
2021-04-29 21:24:56 +08:00
多半代码写的太烂了
贴出来,让大家批判下
Joker123456789
2021-04-29 21:52:17 +08:00
tenghuanhe
2021-05-09 10:57:37 +08:00
检查下 TCP 连接,看看 TIME_WAIT 多不多

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

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

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

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

© 2021 V2EX