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

2022-12-13 17:40:07 +08:00
 jorneyr

同一个代码,测试结果:

测试程序: 用 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 使用情况也差不多。

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

QPS 还是 2000 左右。
jorneyr
2022-12-13 17:51:02 +08:00
Linux 上 ulimit -n 结果上 1024
Fri
2022-12-13 18:10:47 +08:00
JDK 是适配 Apple Silicon 的吗?
jorneyr
2022-12-13 18:25:23 +08:00
@Fri JDK 17 ,M1 的。
xtinput
2022-12-13 21:07:31 +08:00
用 node.js 写了个简单的 http 服务,QPS 12000 以上
xtinput
2022-12-13 21:10:33 +08:00
虚拟机里的 nginx 服务也是 QPS 12000 以上
jorneyr
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
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
2022-12-14 08:26:56 +08:00
@jorneyr #10 我的是 M1Max 13.2 的系统
xtinput
2022-12-14 08:31:12 +08:00
13.1

Requests per second: 14729.75 [#/sec] (mean)
julyclyde
2022-12-14 09:32:15 +08:00
@jorneyr 在新的 tab 里看 ulimit 没变,那就对了
https://julyclyde.org/?p=578
jorneyr
2022-12-14 09:41:54 +08:00
看来是我的环境问题了。
jorneyr
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
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
2022-12-14 11:47:17 +08:00
@lscho 同款,12.6 ,php 起的服务
难道是 Ventura 的出厂阴间设置?
lscho
2022-12-14 12:32:08 +08:00
@jorneyr 不知道,我升 13 用了两天,比较卡,又回退了

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

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

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

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

© 2021 V2EX