我正在尝试查看Go HTTP服务器在我的机器上可以处理多少请求数,因此我尝试进行一些测试,但差异如此之大,以至于我感到困惑。
首先,我尝试使用ab进行基准测试,并运行以下命令:
$ ab -n 100000 -c 1000 http://127.0.0.1/
进行1000个并发请求。
结果如下:
Concurrency Level: 1000
Time taken for tests: 12.055 seconds
Complete requests: 100000
Failed requests: 0
Write errors: 0
Total transferred: 12800000 bytes
HTML transferred: 1100000 bytes
Requests 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 read
Requests/sec: 26767.50
Transfer/sec: 3.27MB
26767 次/秒?我不明白为什么会有这么大的差异。
运行的代码是最简单的 Go 服务器。
package main
import (
"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之间巨大的差异?
我的目标是观察增加核心数后Go服务器能够处理多少请求,但即使在增加更多CPU之前就已经存在巨大的差异。请问有人知道在增加更多的核心时Go服务器如何扩展?另外,为什么ab和wrk之间会有如此巨大的差异?