线上项目并发问题,深夜在线求救 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cs3230524
V2EX    Node.js

线上项目并发问题,深夜在线求救

  •  
  •   cs3230524 2022-10-16 01:28:41 +08:00 6658 次点击
    这是一个创建于 1170 天前的主题,其中的信息可能已经有所发展或是发生改变。

    环境 v14.x 框架 nestjs7 devops:k8s+docker

    问题:并发不多的情况下 rt 高 复现:写一个接口不做任何操作直接返回,内网 1000 并发都要 2s 了,2000 并发的情况下,50%的接口 rt 就超过 10s 了。在这种情况出现的时候去容器内部 curl localhost 也会出现卡顿。通过增加 pod 并不能改善这个情况,感觉 4c8g 规格的一个实例和 10 个实例压测下来负载是一样的并没有增加。

    所以,是我的写法有问题吗?如果不是有可能是 k8s 环境配置吗?跪求,要死了。

    21 条回复    2022-10-21 20:52:49 +08:00
    liuhan907
        1
    liuhan907  
       2022-10-16 01:43:24 +08:00
    横向扩展不能增加吞吐先观察一下流量是否正确分发了,其次考虑是否有全局单点,比如缓存和数据库等。以上都没问题那就本地开发环境开 profiling 观察热点和瓶颈。
    cs3230524
        2
    cs3230524  
    OP
       2022-10-16 02:03:00 +08:00
    @liuhan907 测试接口未访问任何服务,直接返回 null ,感觉是吞吐量不够。
    cs3230524
        3
    cs3230524  
    OP
       2022-10-16 02:03:42 +08:00
    开发环境复现不了问题
    blackboom
        4
    blackboom  
       2022-10-16 02:45:32 +08:00 via iPhone
    LB 是不是有问题
    akira
        5
    akira  
       2022-10-16 05:59:43 +08:00
    前端负载均衡是啥 是不是那里就挂了
    des
        6
    des  
       2022-10-16 08:11:39 +08:00 via iPhone
    系统负载情况呢?试试不用 docker 或者用 network host ?
    lairdnote
        7
    lairdnote  
       2022-10-16 09:06:50 +08:00
    加链路跟踪 。上线都不测试吗?
    foam
        8
    foam  
       2022-10-16 09:31:21 +08:00 via Android
    容器内也对 localhost 跑下压测,先诊断 pod 内部有没有问题。若吞吐量符合正向预期再向前排查链路,网关,lb ,带宽等
    Harry
        9
    Harry  
       2022-10-16 09:39:41 +08:00
    按照之前都历史经验,这个是 Linux 服务上,TCP 相关的参数没有调整。因为这个参数有限制,所以并发低都时候 RT 也不高( 1000 的并发),并发高( 2000 并发)的时候 RT 和 成功率够不高。

    你按照这两个帖子的思路处理这个 RT 和成功率就会上来了:
    [1] https://cloud.tencent.com/developer/article/1521303
    [2] https://netkiller.sourceforge.net/testing/performance/stress.html

    (这两个链接是我按照关键字搜索的,你照着参考,把你的机器参数改大就行了)
    Harry
        10
    Harry  
       2022-10-16 09:44:22 +08:00
    具体的原理上,你参考一下这个文章[1]。十有八九的类似的性能问题都是出现在这里的。

    [1] https://www.cnblogs.com/wx170119/p/12068005.html
    seliote
        11
    seliote  
       2022-10-16 09:46:45 +08:00
    一楼说的挺对的,链路追踪一下看到底从哪到哪了,怀疑并没有正确分发
    winglight2016
        12
    winglight2016  
       2022-10-16 09:47:18 +08:00
    看起来像是请求的服务器端使用了阻塞式处理,不过我不了解 nestjs 。lz 试一下在 k8s 搭一个 nginx 的 lb 服务,看看能不能处理 1w 以上的并发,如果可以,说明你的 service 配置不对,如果不行,那就是 k8s 有问题了。
    wangritian
        13
    wangritian  
       2022-10-16 09:47:37 +08:00
    你在容器内都卡顿,看上去不像 k8s 的锅(也许是 pod 设置限制了 cpu ),单拉出来一台低配物理机调试吧
    joApioVVx4M4X6Rf
        14
    joApioVVx4M4X6Rf  
       2022-10-17 08:18:21 +08:00
    楼主解决了吗,快来总结一下
    lazyfighter
        15
    lazyfighter  
       2022-10-17 09:30:34 +08:00
    上面都在说啥, 一个空方法返回都会 10s , 还上链路追踪,还加缓存,背八股文也得看实际场景呀, 猜测线程池的问题,不懂 nestjs7 , 但是猜测类似于 tomcat 的线程池, 楼主用的默认配置
    NeoZephyr
        16
    NeoZephyr  
       2022-10-17 10:17:12 +08:00
    不了解你的那个,你写一个 go server 丢上去,看看并发能到多少
    NeoZephyr
        17
    NeoZephyr  
       2022-10-17 10:20:55 +08:00
    @Harry 我之前遇到一个问题就是 nginx 的连接没有保持,keepalive_timeout
    bthulu
        18
    bthulu  
       2022-10-17 14:07:30 +08:00
    nestjs 非 io 操作只有一个线程在处理, 你开多大机器规格他都只有一个线程在干活.
    你看看 cpu 占用, 如果有一个核心占用一直在 80%以上, 那不用想了, 就是 cpu 忙不过来了.
    Seulgi
        19
    Seulgi  
       2022-10-17 14:19:12 +08:00
    1000 并发, rt 要 2s, 这时候多少个 pod, 如果按负载是正常的情况看, 平均下去每个 pod 是多少请求. 按你 2000 并发看, 2000/10 个 pod,每个 pod 是 200, 大概率是 nestjs 的线程问题. Tomcat 默认线程也就 200. 负载情况可以通过 k8s 看流量或者自己加加日志统计.
    cs3230524
        20
    cs3230524  
    OP
       2022-10-21 20:35:32 +08:00
    @v2exblog
    对方运维不配合,没办法排查。
    升级了下 fastify 能抗到 2000 多 TPS ,后续流量也变小了就没管了
    joApioVVx4M4X6Rf
        21
    joApioVVx4M4X6Rf  
       2022-10-21 20:52:49 +08:00
    @cs3230524 难过,当场失去绝佳提高自身经验的机会
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3238 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 00:44 PVG 08:44 LAX 16:44 JFK 19:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86