Так что я пытаюсь получить тело ответа из http.Response, чтобы сделать некоторые манипуляции, а затем установить его обратно. Это моя первая попытка получить его без слива http.Response:http.Response.Body копирование приводит к увеличению использования большой памяти
bodyBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
// err
} else {
cachedBody := string(bodyBytes)
// Restore the io.ReadCloser to its original state
// This is causing huge increases in memory usage.
resp.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
}
Если я пошлю 500 запросов через, с размером ответа 1mb (большой кусок JSON, но это может быть любой формат, не только JSON), использование памяти сервера достигает ~ 400 Мбайт и не возвращается. Это нормально? Что-то не так с вышеуказанным кодом? Я что-то упустил, чтобы выпустить память?
defer resp.Body.Close() не имеет никакого эффекта.
Спасибо!
Edit 1
Вот суть с простой версией прокси, включая предложенный волосок. Если сервер на localhost: 3000 (где он проксирует) возвращает большой ответ, использование памяти будет быстро увеличиваться. В моем случае я возвращаю файл 1mb json и отправляю 500 запросов через прокси-сервер, увеличивая объем использования памяти до 400 МБ.
ходу прокси:
https://gist.github.com/marbemac/300c4c376171cbd27cc3
Простой сервер узла, который возвращает файл в том же каталоге под названием large_response.json.
https://gist.github.com/marbemac/55aaa78f5858484d33f6
Возможно, это поможет вам http://stackoverflow.com/questions/21080642/memory-leak-in-go-http-standard-library Попробуйте 'go prof' – RoninDev
Хм, это интересно, спасибо за ссылку, но я не Думаю, что да. Это внезапное и драматическое увеличение (начиная с момента запуска в 6 МБ до 400 МБ, отправляя эти 500 запросов против него). Я чувствую, что что-то мне не хватает. – Marc
Смущенный тем, что вы пытаетесь сделать здесь. Конечно, 'defer resp.Body.Close()' не имеет никакого эффекта, вы делаете его 'ioutil.NopCloser'. Прочтите его, закройте его, прежде чем делать 'Close()' a no-op, а затем установите его, что происходит? – user3591723