Потребитель ActiveMQ замедляется через несколько дней
Мы являемся ActiveMQ
настройка со всеми настройками по умолчанию. URL брокера похож на failover:(tcp://host1,tcp://host2,tcp://host3)?randomize=false
У нас есть 2 очереди сообщений, где производитель публикует постоянные сообщения.
Сообщения, как правило, имеют постоянный поток, но когда рынки открыты, в течение почти 2 часов происходит поток сообщений. Эта настройка работает нормально в течение 2-3 дней, а затем потребитель замедляет обработку сообщений, и мы видим увеличение очереди.
Потребитель выполняет следующие шаги:
- Преобразовать сообщение.
- Обработать его
- Добавьте в кеш и БД.
Prefetch size
это 1000
Ниже приведены некоторые из наблюдений:
- Потребительская обработка, кажется, не является проблемой, иначе она всегда замедлялась бы.
- Похоже, что брокер ActiveMQ замедляет обработку, но у меня нет доказательств
- Мы заметили, что из 3 хостов только хост 1 и 2 обрабатывают большинство сообщений.
Любые идеи о том, как объяснить эту медлительность?
РЕДАКТИРОВАТЬ:
Проанализировал это дальше и обнаружил, что Kahadb
хранить [Persistent
сообщения хранятся в Kahadb
в брокере] достигает 100% памяти, когда потребитель замедляется. Я понимаю, что производитель блокируется, когда объем хранилища достигает 100%, но почему потребитель будет тормозить? Это потому что Kahadb
может замедлиться в это время, а извлечение сообщений, эквивалентных размеру предварительной выборки, занимает больше времени?