У меня есть несколько вопросов об использовании памяти ActiveMQ ...
Сначала позвольте мне объяснить, что случилось.
У меня есть несколько очередей (10+), которые должны обрабатывать тысячи сообщений каждый день.
Опция «Управление источником потока» включена для каждой очереди.
Все мои сообщения * постоянные * сообщения.
Однажды в моей производственной среде мои потребители больше не потребляли сообщения, в то время как мои очереди получали больше сообщений от их производителей.
Я пытался перезапустить своих потребителей: безрезультатно.
Перезапуск ActiveMQ : безрезультатно.
Я заметил, что значение «Используемый процент памяти» было больше 100 (что-то вроде 160).
Затем я выделил больше памяти для моей виртуальной машины и моего брокера: это сработало, мои потребители снова стали потреблять.
У меня следующие вопросы:
1 / Что я понял, так это то, что память, используемая ActiveMQ , связана с количеством сообщений, которые хранятся в памяти до отправки потребителям. Это правильно ? Если нет, как это удалось?
2 / Например, если у меня установлен размер предварительной выборки 100 на стороне потребителя,
так что самое большее 100 сообщений будет в памяти на стороне очереди? Если нет, то как
это удалось?
3 / Как я могу достичь "Используемый процент памяти: 160"? Документация, которую я прочитал
это мне не очень помогло ... И, похоже, оно не связано с памятью Java Heap (когда я смотрю это с помощью Jconsole, когда JHM уменьшается, использование процента памяти не помогает).
Это потому, что, например, если у меня есть 10 очередей, каждая очередь требует 160 МБ в
память при этом у моей JVM всего 1ГБ
4 / Если я установлю атрибут «memoryLimit» в элементе policyEntry для
очередь, я думаю, очередь не будет использовать больше, чем объем памяти, которую я
установили.
Что делать, если в очередь приходит сообщение больше, чем memoryLimit?