Когда сервер запустился, память заняла около 83 МБ, которую я проверил на top
. И когда некоторые соединения были приняты и что-то сделали, память заняла около 500 МБ, Затем я закрыл все соединения и сервер, чтобы очистить все структуры, после чего память немного уменьшилась, около 30 МБ. вернуться к уровню, когда сервер запустился.Почему не уменьшается память в golang?
, когда сервер начал, я посмотрел кучу информации
# runtime.MemStats
# Alloc = 7251528
# TotalAlloc = 52713992
# Sys = 15010040
# Lookups = 49
# Mallocs = 2072338
# Frees = 2038576
# HeapAlloc = 7251528
# HeapSys = 12025856
# HeapIdle = 2121728
# HeapInuse = 9904128
# HeapReleased = 0
# HeapObjects = 33762
# Stack = 425984/425984
# MSpan = 75504/81920
# MCache = 4800/16384
# BuckHashSys = 1457768
# NextGC = 11496656
И когда закрыты все соединения, через некоторое время и дс, я снова поднял
# runtime.MemStats
# Alloc = 5845912
# TotalAlloc = 13053679584
# Sys = 73128248
# Lookups = 794
# Mallocs = 22728491
# Frees = 22699056
# HeapAlloc = 5845912
# HeapSys = 60112896
# HeapIdle = 52166656
# HeapInuse = 7946240
# HeapReleased = 0
# HeapObjects = 29435
# Stack = 3719168/3719168
# MSpan = 88608/180224
# MCache = 4800/16384
# BuckHashSys = 1597264
# NextGC = 9428528
И я не знаю, почему это так мало. Потому что я уже очистил переменные, сохраненные на сервере. Кто-нибудь даст какой-нибудь совет о том, как я нахожу проблему?
PS. Он не заботится о горутине, я проверил ее, и количество горутинцев не увеличилось. И я уже использую pprof и открываю gcdebug.
Возможный дубликат [Go 1.3 Сборщик мусора, не выпускающий серверную память обратно в систему] (http://stackoverflow.com/q/24376817/978917)? – ruakh
что-то в этом роде, но я жду больше десяти часов, память остается больше 400 МБ, я в замешательстве и хочу знать, что заняло так много памяти. –
@buzz: что смущает этот ответ? В настоящее время память стека не может быть освобождена. Вы используете go1.4? – JimB