Open BatNiy opened 5 years ago
Подумав, понял, что "не вызывать метод, пока не выполнилась предыдущая итерация", приведёт к тому, что статистика будет запаздывать. Видимо, механизм периодичного вызова, нужно оставить тем же. Ну или переделать формат хранения статистики :|
Описание ошибки
Модуль NewPlatform.Flexberry.ServiceBus.Components.StatisticsService.RmqStatisticsCollector со временем начинает потреблять много ресурсов.
Шаги воспроизведения
Запустить сервис шины, ждать. Для ускорения процесса можно поставить свойство Interval в значение OneSecond (за минут 15 набралось на 4 Гб).
Конфигурация
Стандартная конфигурация шины для RMQ.
Пути решения
В классе периодически запускается GetWatchedQueues(), который для каждой подписки из шины достаёт статистику соответствующей очереди в RMQ. Если сбор данных всех очередей длится больше чем периодичность вызова метода, копятся Task'и. Предлагается не вызывать метод, пока не выполнилась предыдущая итерация. Также можно оптимизировать время работы метода, путём одного вызова получения данных всех подписок (вместо вызова получения данных конкретной очереди).
Исходный код
Проект на GitHub:
NewPlatform.Flexberry.ServiceBus
Ветка:develop
Примерная оценка трудоёмкости
3 часа.