我的 M1 14 寸的 Web 服务 QPS 很低,是我的环境有问题吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jorneyr
V2EX    Apple

我的 M1 14 寸的 Web 服务 QPS 很低,是我的环有问题吗?

  •  
  •   jorneyr 2022-12-13 17:40:07 +08:00 2222 次点击
    这是一个创建于 1031 天前的主题,其中的信息可能已经有所发展或是发生改变。

    同一个代码,测试结果:

    • M1 的 Web 服务压测 QPS 大概只有 2000 左右 (M1 14 寸: 系统 Ventura ,16G 内存)
    • 虚拟机里 QPS 轻松上 10000 (CentOS 7, 8G 内存,Intel(R) Xeon(R) CPU E5-2678 v3 @ 2.50GHz)
    • 记得 2019 年的时候使用 2014 MacBook Pro 15 寸的压测,也是 ping-pong 这样的简单请求,SpringMVC 代码,QPS 能上 8000 (CPU 好像是 Intel 双核 2.7G ,系统好像是 macOS 9 ,8G 内存)

    测试程序: 用 go gin 写了个最简单的 Web 服务

    router.GET("/api/test", func(c *gin.Context) { c.IndentedJSON(200, gin.H{ "name": "alice", }) }) 

    M1 Mac 本机压测过程:

    1. 命令行启动: nohup ./main > /dev/null 2>&1 &
    2. 压测命令: ab -c 20 -n 10000 http://localhost:8080/api/tes

    虚拟机 Linux 本机压测过程:

    1. Mac 上交叉编译为 Linux 可执行程序: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
    2. 命令行启动: nohup ./main > /dev/null 2>&1 &
    3. 压测命令: ab -c 20 -n 10000 http://localhost:8080/api/tes

    上面同样的程序,使用 SpringBoot 写了一个进行压测,在 M1 Mac 上的 QPS 和 Go 程序的结果几乎一样,CPU 使用情况也差不多。

    第 1 条附言    2022-12-14 20:15:11 +08:00
    今天升级到了 macOS 13.1 ,同样的程序,ulimit -n 还是 256 ,但是 QPS 竟然达到了 3 万 7: Requests/sec: 37812.63 。

    看来是 macOS 13.0.1 的系统问题了。
    19 条回复    2022-12-14 12:32:08 +08:00
    jorneyr
        1
    jorneyr  
    OP
       2022-12-13 17:42:07 +08:00
    压测命令是 ab -c 20 -n 10000 http://localhost:8080/api/test ,上面输入的时候少一个 t 。
    F281M6Dh8DXpD1g2
        2
    F281M6Dh8DXpD1g2  
       2022-12-13 17:43:31 +08:00 via iPhone
    ulimit 改了么
    jorneyr
        3
    jorneyr  
    OP
       2022-12-13 17:44:52 +08:00
    @liprais 没改,使用了安装系统后默认的。
    jorneyr
        4
    jorneyr  
    OP
       2022-12-13 17:49:08 +08:00
    1. 修改 ulimit -n 5000 (在新的 tab 里看还是 256)
    2. 启动 go 程序
    5. 打开新 tab ,也执行 ulimit -n 5000 ,然后压测

    QPS 还是 2000 左右。
    jorneyr
        5
    jorneyr  
    OP
       2022-12-13 17:51:02 +08:00
    Linux 上 ulimit -n 结果上 1024
    Fri
        6
    Fri  
       2022-12-13 18:10:47 +08:00
    JDK 是适配 Apple Silicon 的吗?
    jorneyr
        7
    jorneyr  
    OP
       2022-12-13 18:25:23 +08:00
    @Fri JDK 17 ,M1 的。
    xtinput
        8
    xtinput  
       2022-12-13 21:07:31 +08:00
    用 node.js 写了个简单的 http 服务,QPS 12000 以上
    xtinput
        9
    xtinput  
       2022-12-13 21:10:33 +08:00
    虚拟机里的 nginx 服务也是 QPS 12000 以上
    jorneyr
        10
    jorneyr  
    OP
       2022-12-13 22:20:33 +08:00
    @xtinput 用 node.js 写了个简单的 http 服务,QPS 12000 以上

    是 M1 吗?哪个版本的系统呢?

    刚刚用 Nodejs express 写了个 Hello world ,QPS 在 1000 左右,QPS 只是 Go 和 Java 的一半。
    Zhuzhuchenyan
        11
    Zhuzhuchenyan  
       2022-12-13 22:54:07 +08:00
    系统版本 12.6.1 ,用 nodejs v14.19.3 配合 express 写了一个最简单的 demo ,https://expressjs.com/zh-cn/starter/hello-world.html

    ab -c 20 -n 10000 http://localhost:3000

    Requests per second: 6577.32 [#/sec] (mean)
    Time per request: 1.520 [ms] (mean)
    Time per request: 0.152 [ms] (mean, across all concurrent requests)
    Transfer rate: 1355.29 [Kbytes/sec] received

    wrk -c 32 -t 8 -d 5 http://localhost:3000

    Requests/sec: 21436.36
    Transfer/sec: 4.89MB

    不过 apache benchmark 在测试过程中会有很诡异的卡住,wrk 无法复现这个问题
    xtinput
        12
    xtinput  
       2022-12-14 08:26:56 +08:00
    @jorneyr #10 我的是 M1Max 13.2 的系统
    xtinput
        13
    xtinput  
       2022-12-14 08:31:12 +08:00
    13.1

    Requests per second: 14729.75 [#/sec] (mean)
    julyclyde
        14
    julyclyde  
       2022-12-14 09:32:15 +08:00
    @jorneyr 在新的 tab 里看 ulimit 没变,那就对了
    https://julyclyde.org/?p=578
    jorneyr
        15
    jorneyr  
    OP
       2022-12-14 09:41:54 +08:00
    看来是我的环境问题了。
    jorneyr
        16
    jorneyr  
    OP
       2022-12-14 09:45:44 +08:00
    @Zhuzhuchenyan wrk -c 32 -t 8 -d 5 http://localhost:3000

    我这把 ab 换成了 wrk 后,QPS 能到 5000 ,要是 ulimit 等上去了,QPS 上万应该是比较容易的。
    lscho
        17
    lscho  
       2022-12-14 11:19:06 +08:00
    同款,12.6 ,php 起的服务

    Requests per second: 17753.16 [#/sec] (mean)
    Time per request: 1.127 [ms] (mean)
    Time per request: 0.056 [ms] (mean, across all concurrent requests)
    Transfer rate: 4941.07 [Kbytes/sec] received
    jorneyr
        18
    jorneyr  
    OP
       2022-12-14 11:47:17 +08:00
    @lscho 同款,12.6 ,php 起的服务
    难道是 Ventura 的出厂阴间设置?
    lscho
        19
    lscho  
       2022-12-14 12:32:08 +08:00 via iPhone
    @jorneyr 不知道,我升 13 用了两天,比较卡,又回退了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5124 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 03:51 PVG 11:51 LAX 20:51 JFK 23:51
    Do have faith in what you're doing.
    ubao 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