Задать вопрос
@zuart
... уже и не знаю, нуп, похоже ...

Непонятные метаморфозы с использованием памяти сервисом NodeJS?

Приветствую. Нужна помощь специалиста.

В двух словах - есть небольшой сервис, в некотором роде упрощенный "велосипед с редиса". Ведет в своей памяти значения переданных в него данных "по строковому ключу", использует для этих данных время жизни (это все редиска умеет), уведомляет подключенных клиентов об изменении данных, на которые эти клиенты подписаны (это частично редиска умеет) + опция синхронизация всего блока данных в случае переподключения и немного других мелочей, сугубо сервисных (как раз тех, которые редиска не умеет).

Заметил, что сервис работает какое-то время стабильно и без проблем с достаточно немаленьким потоком входящих данных (в секунду сыпется по 500 ключей, в значенийх которых структуры длиной по 1000 элементов, каждый элемент - это небольшая структура из 5-10 строковых полей). Потребление памяти в это время укладывается в диапазон 90-110 Мб...

Но в какой-то момент использование памяти резко (в течение буквально нескольких минут) выстреливает до 1.5-1.9 Гб, и с этого момента становятся заметны незначительные затупы. Вставил мониторинг в код - снимает и логгирует потребление памяти через "process.memoryUsage()". И вот что увидел:

5b180bb0be217405052196.jpeg

В какой-то момент использование памяти по всем полям сначала резко вырастает, потом еще резче падает до "обычных" значений, но общее потребление не уменьшается. Соответственно три вопроса:
  • что это за лавинообразное возрастание памяти, когда поток входящих данных не меняется, его объем константа (специально для теста делал)
  • почему при освобождении памяти потребление ее процессом не уменьшается (собственно что это вообще было)
  • куда копать для устранения этой ситуации (пытаюсь уже раз сотый смотреть в сторону редиса, но некоторые возможности этого модуля никак не укладываются в редиску, а отказаться от них нельзя - придется много переделывать в дургих службах)


Заранее спасибо
  • Вопрос задан
  • 70 просмотров
Подписаться 2 Средний 4 комментария
Решения вопроса 1
@zuart Автор вопроса
... уже и не знаю, нуп, похоже ...
Курение мануалов привели к подробному изучению принципов работы очистки памяти от мусора и т.п. ерунды. Дальше ряд оптимизаций кода, вырезки и путь к уточнению проблемы - часть устранены, остались только проблемы "утечки" в модуле WS...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@profaller
Вам на битву экстрасенсов надо обратиться. Тут вам не помогут.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы