Как определить основную причину избыточного потребления памяти при развертывании Heroku Python? - PullRequest
0 голосов
/ 28 марта 2019

Я недавно развернул веб-приложение на Heroku (бесплатная версия).Развертывание использует Python с библиотеками для plotly, dash, pandas и bootstrap.Я хотел бы предположить, что эта установка, основанная на размере всех файлов, должна быть только в нескольких десятках мегабайт.Тем не менее, он потребляет более 400 МБ ОЗУ.Как устранить неполадки, чтобы определить причину такой высокой памяти (возможно, утечку памяти)?

Я пытался использовать инструмент heroku labs logs-runtime-metrics, но информация ограничена.Я также пытался использовать инструменты разработчика Chrome, но не смог никуда добраться.

heroku labs:enable log-runtime-metrics
heroku logs

Журнал выглядит примерно так:

heroku[web.1]: source=web.1 dyno=heroku.XXXX sample#memory_total=458.20MB sample#memory_rss=431.30MB sample#memory_cache=26.89MB sample#memory_swap=0.00MB sample#memory_pgpgin=160223pages sample#memory_pgpgout=49568pages sample#memory_quota=512.00MB

Как я упоминал выше, значение memory_rssчто в переводе на фактическое потребление ОЗУ слишком велико для функции на основе Python (близко к пределу).Запуск того же процесса на моей локальной машине достигает пика в 180 МБ.Влияет ли импорт модулей Python на производительность памяти слишком сильно?

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


РЕДАКТИРОВАТЬ 1: gunicorn --preload и улучшенная база кодов

Я попытался несколько улучшить оптимизацию памяти, используя этот хак, где можно предварительно загрузитьприложение, как описано здесь: Gunicorn Preload

Это делается путем редактирования Procfile, чтобы он содержал следующее:

web: gunicorn hello:app --preload

Я также внес некоторые изменения в том, как яимпортировал определенные библиотеки и избегал других, чье назначение могло быть переопределено.Несмотря на все это, мои новые журналы показывают приличное улучшение:

heroku[web.1]: source=web.1 dyno=heroku.XXXX sample#memory_total=272.63MB sample#memory_rss=248.45MB sample#memory_cache=24.18MB sample#memory_swap=0.00MB sample#memory_pgpgin=97938pages sample#memory_pgpgout=28145pages sample#memory_quota=512.00MB

Дополнительные входные данные приветствуются!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...