Загрузка файлов Django вызывает утечку памяти - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть наблюдение об утечке памяти:

  • Если мы попытаемся POST файлы для представления Django (я использую APIView DRF), Django не освободит память даже ответомбыло сделано.Память будет расти, если вы продолжите загружать файлы, даже если вы ничего не делаете в views.py.(Я попытался загрузить 100 файлов одновременно, вызывая один и тот же API).Я знаю, что если загруженный файл меньше 2,5 мегабайт, Django будет хранить все содержимое загрузки в памяти.Поэтому мне интересно, что это может быть проблемой для возможной утечки памяти, потому что она никогда не освободит память.

PS: Даже если я установлю FILE_UPLOAD_MAX_MEMORY_SIZE = 0, что означает использование диска для хранения файлов вместо использования памяти, я все еще вижу увеличение памяти на фоне.

IЯ использую:

  • Python3.6 / Django2.1, Gunicorn
  • DEBUG = False

Кто-нибудь знает, как решить эту проблему?Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Оказывается, проблема Ганкорна.После установки --thread кажется, что Gunicorn каким-то образом не освободит память, пока не будут использованы все потоки (не уверен, что это правильный термин).

Это может быть полезно: Работники Gunicorn иТемы

0 голосов
/ 25 сентября 2019

Невозможно определить причину проблемы, но вот список вещей, которые вы можете попробовать:

  • Убедитесь, что вы не используете DEBUG=TRUE
  • Попробуйте обновить свойPython/Django версий, если возможно
  • Какой WSGI сервер вы используете?(надеюсь, не сервер разработки).Обновите до последней версии или попробуйте другую и сравните (например, если вы используете gunicorn try uwsgi или наоборот)
  • Не решение, а обходной путь: gunicorn имеет max_requests настройка и вы указываете количество запросов перед перезапуском рабочих процессов.Большинство серверов имеют такую ​​настройку.Перезапуск освободит память в случае ее утечки.

Если проблема не устранена, вам может потребоваться отследить причину с помощью инструмента, подобного tracemalloc.

.
...