Go не обнаруживает изменения SOMAXCONN с сервера Ubuntu AWS - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь провести стресс-тест моего сервера golang net / http с k6 . Когда я использую 2048 виртуальных пользователей для подключения к своему серверу aws ubuntu aws, k6 выдает «сброс соединения по пиру». Расследуя в Интернете, я обнаружил, что, вероятно, проблема заключается в очереди. Читая некоторые вопросы о стековом потоке, я попытался изменить переменную SOMAXCONN из файла sysctl.conf. После изменения его с 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.

1 Ответ

0 голосов
/ 20 января 2019

Я думаю, что способ проверки 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))
}
...