登录
首页 >  Golang >  Go问答

Go未能检测到aws ubuntu服务器上的SOMAXCONN更改

来源:stackoverflow

时间:2024-03-08 18:00:27 286浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《Go未能检测到aws ubuntu服务器上的SOMAXCONN更改》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我正在尝试使用 k6 对我的 golang net/http 服务器进行压力测试。当我使用 2048 个虚拟用户访问我的 aws ubuntu 服务器时,k6 抛出“连接由对等方重置”。上网查了一下,发现问题可能是积压队列。 阅读一些 stackoverflow 问题,我尝试修改 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))
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>