Веб-приложение Flask + Gunicorn вызывает утечку памяти клиента - PullRequest
0 голосов
/ 30 октября 2019

Я нахожусь в процессе разработки веб-приложения на Python для Flask + Gunicorn, работающего на Raspberry Pi. Приложение отвечает за считывание данных с нескольких датчиков, их сохранение, а затем выводит на экран показания времени и времени в веб-приложении для мониторинга пользователем. Веб-приложение проверяет сервер на наличие обновленных данных каждые ~ 3 секунды или около того, они передаются в формате JSON и используются для обновления графиков данных по времени (реализовано с помощью диаграмм Google)

Однако у меняпроблема, заключающаяся в том, что использование памяти веб-браузером на стороне клиента постоянно увеличивается во времени (использование ОЗУ браузером увеличивается примерно на 1 ГБ в час) до тех пор, пока браузер в конечном итоге не выйдет из строя. Обратите внимание, что я регулярно преобразую данные в серверной части веб-сервера, поэтому размер JSON-файла, передаваемого клиенту, максимально достигает примерно 500 КБ. Кроме того, нет проблем с увеличением использования памяти на стороне сервера (т.е. приложение gunicorn не увеличивает использование памяти на Raspberry Pi).

Я заметил, что если я закрою веб-браузер клиента и снова открою его, то использование памяти вернется к очень маленькому приемлемому уровню. Поэтому я подозреваю, что проблема заключается в том, что веб-браузер хранит / кэширует ВСЕ предыдущие версии файла JSON (хотя они никогда больше не используются), и, следовательно, со временем использование памяти увеличивается. Когда я перезагружаю браузер, этот кэш, очевидно, очищается.

Чтобы исправить эту проблему, я попытался добавить на свою страницу скрипт, который периодически выполняет sessionStorage.clear ();и localStorage.clear ();Команды, которые, как я думал, очистят кэш на стороне клиента, но это, очевидно, не работаетЯ также пытался вставить теги в свой HTML, чтобы предотвратить кэширование, например <meta http-equiv="expires" content="Mon, 26 Jul 1997 05:00:00 GMT"/> <meta http-equiv="pragma" content="no-cache" />, но это тоже не сработало.

Есть ли у кого-нибудь какие-либо предложения относительно того, как мне избежать постоянного хранения всех данных, передаваемых на стороне клиента,и тем самым предотвратить использование памяти из-под контроля?

Любая помощь будет принята с благодарностью!

...