func main() { for true { resp, err := http.Get("http://localhost") if err != nil { fmt.Println(err) return } resp.Body.Close() time.Sleep(2 * time.Second) } } смотри, вот при таком упрощенном коде тоже происходит утечка
Если вам скучно, ты вы можете сделать профилирование и посмотреть что там происходит
а можно ему задать некий лимит, скажем 10мб, чтобы он в рамках его "крутился"?) или как-то переодически запускать очистку памяти например
попробуй такой вариант func main() { // open output file fo, err := os.Create("c://1/1.txt") if err != nil { panic(err) } ticker := time.NewTicker(2 * time.Second) for range ticker.C { resp, err := http.Get("http://localhost") if err != nil { fmt.Println(err) return } body, err := io.ReadAll(resp.Body) if err != nil { fmt.Println(err) return } _, err = fo.Write(body) if err != nil { fmt.Println(err) return } err = resp.Body.Close() if err != nil { fmt.Println(err) return } } }
так тоже память процесса увеличивается. но иногда немного уменьшается, но тенденция все равно к росту. та раз это нормально, то +-10мб роли конечно не сыграет, просто я удивился, думал может чтото не так делаю
я поставил тикер в 2 мс, чтобы посмотреть. Процесс крутился около 7 МБ. Пока работало файл успел увеличиться до 200 МБ.
Обсуждают сегодня