Использование памяти постепенно увеличивается с javascript websockets. Почему? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть веб-приложение, использующее веб-сокеты javascript для выборки и рендеринга данных в реальном времени. Проблема заключается в том, что после установления соединения с веб-сокетом использование памяти моим браузером постепенно увеличивается в МБ.Когда я закрываю вкладку, использование памяти уменьшается на столько же, сколько увеличивается.Я передаю данные, полученные через веб-сокеты, в Google-диаграмму, и данные поступают каждые 2 секунды, что вызывает повторный рендеринг диаграммы с новыми данными. Может ли это быть проблемой? Или веб-сокеты вызывают увеличение использования памяти?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Я разобрался в проблеме.Спасибо @ jFriend00 за руководство.

Я предположил, что проблема связана с websocket после некоторого ленивого чтения блогов / сообщений / статей, и после этого разместил вопрос здесь.

Я перепроверил свойкод и обнаружил, что проблема была в повторном рендеринге диаграмм каждую секунду. Я создавал новый экземпляр диаграммы для рендеринга каждую секунду. Я надеялся, что GC выполнит работу по очистке старого графика, но это не так.

Я изменил свой код, чтобы очистить существующий график и отобразить его с новыми данными и вуаля!мое потребление памяти вернулось к норме.

0 голосов
/ 29 ноября 2018

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

Это не общая проблема с webSockets.WebSockets можно открывать и получать данные годами, не увеличивая объем памяти

Эти проблемы решаются с помощью таких методов:

  1. Проверка кода (найдите место, где данные накапливаются бесконечно)
  2. Поиск статей о людях, имеющих схожие проблемы, иПосмотрите на их решения, чтобы увидеть, применимы ли они к вам.
  3. Инструкция по созданию снимков кучи, сравнение их с предыдущими и просмотр того, какие объекты накапливаются, а затем использование этих знаний для поиска источника накопления данных.

См. Как записать моментальные снимки кучи в Chrome для очень подробного описания отладки с использованием памяти.На самом деле нет ничего более конкретного, чем то, что мы можем вам сказать, основываясь на информации о лимитах, которую мы имеем в вашем конкретном случае.

Вероятно, вы можете полностью исключить webSockets из уравнения, не подключая ваш webSocket, а затем просто имитировать получение данных.из webSocket, запустив setInterval() и перерисовывая вашу диаграмму снова и снова.Это может, по крайней мере, устранить часть вашего кода как подозреваемого.

К вашему сведению, вот еще пара статей, на которые стоит обратить внимание:

Утечка памяти при использовании диаграмм Google с ajax

Утечка памяти в линейных диаграммах Google

Советы по устранению утечек памяти из диаграмм Google Javascript с живыми (непрерывными) данными / потоками

Профилирование использования памяти в Chrome

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