Pull to refresh
7
0
Kirill Parasotchenko@Kirooha

User

Send message

Практические советы по устранению утечек памяти в Go

Level of difficultyMedium
Reading time6 min
Reach and readers23K

В этой статье я расскажу, что делать при обнаружении утечки в Go-приложении: чем могут быть вызваны утечки и с чего начать поиск источника проблемы.

Причины утечек

Для начала перечислим возможные причины утечки памяти:

1) Утечка горутин

При утечки горутины утекают также переменные, которые находятся в области ее видимости. Кроме того, стек горутины выделяется в куче

2) Бесконечная запись в глобальные переменные

Приложение может бесконечно писать в какую-нибудь глобальную мапу, в результате чего память будет утекать. Один раз я пытался найти утечку у приложения, которое использовало gorilla context. Особенность этой библиотеки в том, что при обработке http запроса она сохраняет указатель на запрос в глобальную мапу и не удаляет ключ мапы без явного указания в пользовательском коде. Начиная с Go 1.7, разработчики gorilla рекомендуют использовать http.Request.Context()

Читать далее

Information

Rating
Does not participate
Registered
Activity

Specialization

Бэкенд разработчик, Архитектор программного обеспечения
Ведущий
Golang
Проектирование архитектуры приложений
Высоконагруженные системы
SQL
Linux