首页 > 解决方案 > ApacheBench 仅使用“-race”标志从 Go 服务器获取“对等连接重置”

问题描述

我有一个最小的 Go HTTP 服务器(下面的代码)。当我启动服务器go run server.go然后使用触发 5000 个并发请求时

ab -c 5000 -n 5000 http://localhost:8080/

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

go run -race server.go

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

apr_socket_recv: Connection reset by peer (54)

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

额外细节:

转到服务器代码:

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 -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

标签: httpgoapachebench

解决方案


推荐阅读