ApacheBench获得"连接由同行重置"来自Go服务器只有" -race"旗

时间:2018-06-08 19:08:56

标签: http go apachebench

我有一个最小的Go HTTP服务器(下面的代码)。当我使用go run server.go启动服务器,然后使用

启动5000个并发请求时
ab -c 5000 -n 5000 http://localhost:8080/

一切都按预期工作。但是,如果我使用竞争检测器标志启动我的服务器:

go run -race server.go

然后我遇到运行ApacheBench的问题,即使只有1000个并发请求:

apr_socket_recv: Connection reset by peer (54)

有趣的是,我的Go服务器不会崩溃或打印任何错误消息,并且能够继续接收新请求。这表明问题不是Go进程内存不足,因为" -race"负担。

其他详情:

  • 我在Mac上运行Go 1.10
  • ab -V告诉我,我使用的是版本2.3的ab(使用Macbook默认发货,看起来ab已经从brew中删除)。
  • 如果我使用-r标记运行ab,以便它不会立即退出,我会得到输出:Test aborted after 10 failures。所以看起来我的Go服务器必须丢弃连接而不是排队......

转到服务器代码:

package main

import (
    "log"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    log.Printf("got one\n")
}

func main() {
    http.HandleFunc("/", handler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

ulimit设置:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 4864
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 709
virtual memory          (kbytes, -v) unlimited

0 个答案:

没有答案