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))
}
我正在尝试使用 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))
}