为了账号安全,请及时绑定邮箱和手机立即绑定

Go HTTP 服务器测试 ab 与 wrk 结果差异如此之大

Go HTTP 服务器测试 ab 与 wrk 结果差异如此之大

Go
万千封印 2021-10-18 16:23:31
我想看看 go HTTP 服务器可以在我的机器上处理多少请求,所以我尝试做一些测试,但差异太大了,我很困惑。首先,我尝试使用 ab 进行测试并运行此命令$ ab -n 100000 -c 1000 http://127.0.0.1/做 1000 个并发请求。结果如下:Concurrency Level:      1000Time taken for tests:   12.055 secondsComplete requests:      100000Failed requests:        0Write errors:           0Total transferred:      12800000 bytesHTML transferred:       1100000 bytesRequests per second:    8295.15 [#/sec] (mean)Time per request:       120.552 [ms] (mean)Time per request:       0.121 [ms] (mean, across all concurrent requests)Transfer rate:          1036.89 [Kbytes/sec] received每秒 8295 个请求,这似乎是合理的。但是后来我尝试使用以下命令在 wrk 上运行它:$ wrk -t1 -c1000 -d5s http://127.0.0.1:80/我得到了这些结果:Running 5s test @ http://127.0.0.1:80/  1 threads and 1000 connections  Thread Stats   Avg      Stdev     Max   +/- Stdev    Latency    18.92ms   13.38ms 234.65ms   94.89%    Req/Sec    27.03k     1.43k   29.73k    63.27%  136475 requests in 5.10s, 16.66MB readRequests/sec:  26767.50Transfer/sec:      3.27MB每秒 26767 个请求?我不明白为什么会有如此巨大的差异。代码运行是最简单的 Go 服务器package mainimport (    "net/http")func main() {    http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {        w.Write([]byte("Hello World"))    })    http.ListenAndServe(":80", nil)}我的目标是在我增加内核数时查看 go 服务器可以处理多少请求,但在我开始添加更多 CPU 能力之前,这差别太大了。有谁知道 Go 服务器在添加更多内核时如何扩展?还有为什么 ab 和 wrk 之间的巨大差异?
查看完整描述

1 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

首先:基准通常是非常人为的。一旦开始添加数据库调用、模板渲染、会话解析等,发送回少量字节会给你带来非常不同的结果(预计会有一个数量级的差异)

然后解决本地问题 - 开发机器与生产机器上的打开文件/套接字限制、基准测试工具 (ab/wrk) 和 Go 服务器之间针对这些资源的竞争、本地环回适配器或 OS TCP 堆栈(以及 TCP 堆栈调整) ),等等。它继续!

此外:

  • ab 不被高度重视

  • 它只是 HTTP/1.0,因此不做 keepalives

  • 您的其他指标差异很大 - 例如查看每个工具报告的平均延迟 - ab 的延迟要高得多

  • 您的ab测试也运行,12s而不是5s您的 wrk 测试。

  • 即使 8k req/s 也是一个巨大的负载量 - 即每小时2800万个请求。即使在进行数据库调用、编组 JSON 结构等之后,速度下降到 3k/req/s,您仍然能够处理大量负载。不要太早被这些基准测试所束缚。

我不知道你用的是什么类型的机器,但我的 iMac 配备 3.5GHz i7-4771 可以在单线程上推动高达 64k req/s w.Write([]byte("Hello World\n"))

简短回答:使用wrk并记住基准测试工具有很多差异。


查看完整回答
反对 回复 2021-10-18

没有找到匹配的内容?试试慕课网站内搜索吧

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号