Как диагностировать утечку памяти во флаке Google App Engine - PullRequest
0 голосов
/ 19 сентября 2019

У меня запущено приложение Google App Engine (приложение Flask) с утечкой памяти.Смотрите график использования памяти ниже.Использование памяти непрерывно возрастает, пока не достигнет предела, и экземпляр не будет закрыт, а новый запущен.

Это простой API с примерно 8 конечными точками.Ни один из них не обрабатывает большие объемы данных.

Я добавил конечную точку, которая делает снимок памяти с пакетом tracemalloc, сравнивает его с последним снимком и затем записывает вывод в Google Cloud Storage.

Я не вижу в отчетах ничего, что указывало бы на утечку памяти.Пиковое использование памяти записывается как около 0,12 ГБ.

Я также вызываю gc.collect () в конце каждой функции, вызываемой каждой конечной точкой.

Любые идеи о том, какдиагностировать это или что может быть причиной?

enter image description here

1 Ответ

1 голос
/ 20 сентября 2019

Может быть много причин для возникновения этой ситуации.Ваше приложение создает временные файлы?Временные файлы могут быть причиной утечки памяти.Временные файлы также могут быть созданы из ошибок или предупреждений.Прежде всего, я бы проверил свои журналы Stackdriver на наличие ошибок и предупреждений и попытался бы их исправить.

Взаимодействует ли ваше приложение с базами данных или хранилищами?Некоторые проблемы с памятью могут быть связаны с плохим взаимодействием вашего приложения с какой-либо службой хранения данных.Эта проблема также встречалась здесь и была устранена путем обработки ошибок Google Cloud Storage.

Еще одна вещь, которую вы можете сделать, это немного изучить способ использования памяти в вашей функции.Для этого у вас есть несколько хороших инструментов, которые вы можете использовать, например Pympler и Heapy .Игра с этими инструментами может дать вам ценную информацию о вашей проблеме.

...