Часто встречающиеся проблемы и пути их устранения#

Проблема

Причина

Решение

Ошибка применения параметров при использовании tag xml_change

Параметр не применился, в логе брокера присутствуют записи вида: ERROR org.apache.activemq.artemis.core.server  - cvc-complex-type.2.4.a: Invalid content was found starting with element

Ошибка происходит из-за ошибки в наименовании параметра, или пути до параметра. Необходимо в inventory в файле vars.yml проверить содержимое секции xml_change. Корректные пути и имена элементов можно посмотреть в xsd файле schema/artemis-configuration.xsd.

Проблемы с редистрибуцией сообщений при отправке в ANYCAST очередь по FQQN. Например,сообщения при редистрибуции попадают в другую очередь в том же адресе, или редистрибуция не работает совсем.

Значение параметра redistribute-to-target-anycast-fqqn либо не задано, либо задано по умолчанию (false)

Добавить в конфигурционный файл брокера broker.xml настройку <redistribute-to-target-anycast-fqqn>true</redistribute-to-target-anycast-fqqn>. Если настройка отсутствует, используется значение по умолчанию false, которое приводит к ошибкам при редистрибуции сообщений в кластере.

Повышенная утилизация памяти в персистентном режиме при использовании плагинов EncryptionMessagePlugin и/или MessagePlugin

Не установлено ограничение -XX:MaxDirectMemorySize

Подобрать индивидульно значения параметра JVM_ARGS в artemis.profile:
-XX:MaxDirectMemorySize — отвечает за использование direct памяти. Рекомендуемое значение: 20% от xms

Повышенная утилизация памяти в персистентном режиме при использовании плагинов EncryptionMessagePlugin и/или MessagePlugin

Не установлена настройка -Dio.netty.MaxDirectMemory=0, netty использует свою дополнительную область памяти

Данный параметр отвечает за ограничение памяти библиотеки Netty. Netty будет принудительно использовать лимит -XX:MaxDirectMemorySize, иначе может самостоятельно выделить себе вторую область памяти до XX:MaxDirectMemorySize (в таком случае используемая direct память будет в два раза больше чем XX:MaxDirectMemorySize). Параметр -Dio.netty.MaxDirectMemory устанавливается равным 0 при обновлении на релиз 2.2.1 и выше

Повышенная утилизация памяти в персистентном режиме при использовании плагинов EncryptionMessagePlugin и/или MessagePlugin

некорректная работа аллокатора glibc

Установить параметр export MALLOC_ARENA_MAX=2 в artemis.profile

Повышенная утилизация памяти в персистентном режиме при использовании плагинов EncryptionMessagePlugin и/или MessagePlugin

Увеличенные настройки в broker.xml: journal-buffer-size и journal-max-io

Убрать параметр journal-buffer-size из broker.xml, тогда будет использоваться значение по умолчанию 500Кб; параметр journal-max-ioустановится в значение 500 автоматически при обновлении на версию 2.2.1

При scaleDown на большом количестве сообщений (как минимум нескольких тысячах сообщений в одной очереди) и персистентном режиме работе брокера возможно появление в логах брокера при его остановке следующих сообщений:
INFO org.apache.activemq.artemis.core.server - AMQ221078: Scaled down 4000 messages total.
WARN org.apache.activemq.artemis.core.server - AMQ222153: Cannot locate record for message id = {id_value1} on Journal
org.apache.activemq.artemis.api.core.ActiveMQShutdownException: Journal must be in state=LOADED, was [STOPPED]
at org.apache.activemq.artemis.core.journal.impl.JournalImpl.checkJournalIsLoaded(JournalImpl.java:1311)
at org.apache.activemq.artemis.core.journal.impl.JournalImpl.tryAppendDeleteRecord(JournalImpl.java:1176)

WARN org.apache.activemq.artemis.core.server - AMQ222153: Cannot locate record for message id = {id_value2} on Journal
org.apache.activemq.artemis.api.core.ActiveMQShutdownException: Journal must be in state=LOADED, was [STOPPED]
at org.apache.activemq.artemis.core.journal.impl.JournalImpl.checkJournalIsLoaded(JournalImpl.java:1311)
at org.apache.activemq.artemis.core.journal.impl.JournalImpl.tryAppendDeleteRecord(JournalImpl.java:1176)

Такое поведение брокера является ожидаемым, и это связано с тем, что добавление записи об удалении сообщения в журнал происходит без синхронизации с остальными потоками, в частности с потоком, в котором происходит остановка storageManager, который отвечает за работу с журналом сообщений.
При следующем старте, брокер проведет проверку на наличие сообщений в журнале, которые должны быть удалены, и добавит запись об удалении таких сообщений в журнал.
При этом в лог брокера будут выведены следующие сообщения:

INFO org.apache.activemq.artemis.core.server - AMQ221019: Deleting unreferenced message id={id_value1} from the journal
INFO org.apache.activemq.artemis.core.server - AMQ221019: Deleting unreferenced message id={id_value2} from the journal

При высоких нагрузках (больших размерах сообщений и высоких значениях tps) начинают нарастать значения метрик AddressSize и AddressMemoryUsage на межкластерных очередях

Значение параметра producer-window-size задано по умолчанию (1Мб)

В broker.xml установить параметру producer-window-size значение 10Мб, после чего перезапустить брокер, чтобы настройка применилась.

При использовании мониторинга по Prometheus в логах могут быть получены предупреждения:
WARN io.micrometer.core.instrument.internal.DefaultGauge - Failed to apply the value function for the gauge 'artemis.address.memory.usage.percentage'. Note that subsequent logs will be logged at debug level.\<br>java.lang.IllegalStateException: Broker is not started. It can not be managed yet

Запрос метрик происходит во время старта или остановки брокера

Необходимо выполнить старт брокера (мониторинг начнет работать после старта брокера)

Не запускается редистрибуция из anycast очередей при старте брокера или при отключении консьюмеров от очередей

Имя очереди не совпадает с именем адреса

Сменить имя очереди/адреса

Происходит накопление сообщений на бриджах, бриджи останавливаются и перестают работать

Существенная нагрузка большими сообщениями, например 100tps для 400Кб сообщений

Необходимо уменьшить поток больших сообщений (снизить tps)