V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Joker123456789
V2EX  ›  Java

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

  •  
  •   Joker123456789 · 2021-04-29 21:02:23 +08:00 · 1758 次点击
    这是一个创建于 1305 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不知道各位大神有没有遇到过这个问题。

    用 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
    3 条回复    2021-05-09 10:57:37 +08:00
    mightofcode
        1
    mightofcode  
       2021-04-29 21:24:56 +08:00   ❤️ 1
    多半代码写的太烂了
    贴出来,让大家批判下
    Joker123456789
        2
    Joker123456789  
    OP
       2021-04-29 21:52:17 +08:00
    tenghuanhe
        3
    tenghuanhe  
       2021-05-09 10:57:37 +08:00 via Android
    检查下 TCP 连接,看看 TIME_WAIT 多不多
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1049 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 18:38 · PVG 02:38 · LAX 10:38 · JFK 13:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.