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

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

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

    同一个代码,测试结果:

    • 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 。
    liprais
        2
    liprais  
       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   ·   实用小工具   ·   5148 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 09:28 · PVG 17:28 · LAX 01:28 · JFK 04:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.