для записей и с rest api. Запускаю в scratch docker, и делаю запросы из питона (~2.5-3k rps). Смотрю потребление памяти через docker stats. Получается следующая ситуация: график.
Данные хранятся в map, а конкретно shrinking_map (github.com/go-auxiliaries/shrinking-map/pkg/shrinking-map). Shrink происходит каждые 10.000 удалений, а так же когда количество ключей = 0. TTL записей отслеживается через приоритетную очередь.
После удаления всех элементов, размеры мапы и очереди равны 0, однако память никогда не опускается до изначальных значений. Повторение нагрузки рисует точно такой же пик и две ступеньки (график).
Стоит ли искать memory leak или это операционная система считает ресурсы прикрепленными к процессу? Если memory leak, то какие в go существуют решения для этого?
Так же буду рад любой критике решения, так как еще развиваюсь
Это не выглядит как утечка памяти, это выглядит как нежелание рантайма совсем все ресурсы отдавать обратно ОС - ведь уже все равно их запросили. Но я очень мало знаю про рантайм Го. В целом под strace ты можешь увидеть системные вызовы mmap/munmap.
Обсуждают сегодня