Утечка памяти в стандартной библиотеке Go http?

Сделайте, чтобы двоичный файл Go реализовал http-сервер

package main

import (
    "net/http"
)

func main() {
    http.ListenAndServe(":8080", nil)
}

Это начнется с ~ 850 КБ или около того памяти. Отправьте ему несколько запросов через ваш веб-браузер. Заметьте, он быстро поднимается до 1 мб. Если ты подождешь, тыЯ увижу, что это никогда не идет вниз. Теперь разбейте его с помощью Apache Bench (используя скрипт ниже) и наблюдайте, как постоянно увеличивается использование вашей памяти. Через некоторое время это будет в конечном итоге плато около 8,2 МБ или около того.

Редактировать: это неКажется, он останавливается на уровне 8,2, скорее он значительно замедляется. Это'в настоящее время на 9,2 и продолжает расти.

Короче говоря, почему это происходит? Я использовал этот сценарий оболочки:

while [ true ]
do
    ab -n 1000 -c 100 http://127.0.0.1:8080/
    sleep 1
end

Пытаясь докопаться до этого, яЯ пытался настроить параметры. Я'мы пытались закрыть с помощьюr.Close = true предотвратить Keep-Alive. Ничто не похоже на работу.

Первоначально я обнаружил это, пытаясь определить, была ли утечка памяти в программе, которую яЯ пишу. В нем много обработчиков http и вызовов ввода / вывода. После проверки я закрыл все свои соединения с базой данных, я продолжал видеть это 'Увеличение использования памяти. Моя программа на плато около433 МБ.

Вот's вывод Goenv:

GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/mark/Documents/Programming/Go"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
TERM="dumb"
CC="clang"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fno-common"
CXX="clang++"
CGO_ENABLED="1"

Ответы на вопрос(1)

Ваш ответ на вопрос