Go 未检测到来自 aws ubuntu 服务器的 SOMAXCONN 更改

Go isn't detecting SOMAXCONN changes from aws ubuntu server

我正在尝试使用 k6 对我的 golang net/http 服务器进行压力测试。当我使用 2048 个虚拟用户访问我的 aws ubuntu 服务器时,k6 抛出 "connection reset by peer"。在互联网上调查,我发现可能是积压队列的问题。 阅读一些计算器问题,我试图从 sysctl.conf 文件修改 SOMAXCONN 变量。将它从 128 修改为 1024 后,当我 运行 我的主要 go 程序:

package main

import (
    "fmt"
    "log"
    "net/http"
    "strings"
    "golang.org/x/sys/unix"
)

func main() {
    http.HandleFunc("/some_path", handler)

    fmt.Println("SOMAXCONN:", unix.SOMAXCONN)
    log.Fatal(http.ListenAndServe(":8888", nil))
}

我有以下终端输出:

SOMAXCONN: 128

实际上应该打印的时间:

SOMAXCONN: 1024

如果有人能解释一下为什么 GOLANG 检测到的是 128 而不是 1024,我将不胜感激。

我猜你检查 SOMAX 的方式是在编译 go 时设置的?

通过读取 /proc 以不同的方式检查它表明 net.core.somaxconn 已更改

package main

import (
    "fmt"
    "log"
    "net/http"
    "os"
)

func main() {
    filename := "/proc/sys/net/core/somaxconn"
    f, err := os.Open(filename)
    data := make([]byte, 100)
    _, err2 := f.Read(data)
    if err != nil || err2 != nil {
        log.Println(err2)
        log.Fatal(err)
    }
    fmt.Printf("SOMAXCONN: %v", string(data))
    log.Fatal(http.ListenAndServe(":8888", nil))
}