ActiveMQ с хранилищем ReplicatedLevelDB сохраняет дескрипторы файлов открытыми для файлов журналов, поэтому ОС не может освободить место - PullRequest
0 голосов
/ 05 февраля 2020

Мы используем кластер узлов ActiveMQ 5.11.1 (охраняется Zookeepers). Узлы используют хранилище ReplicatedLevelDB. Приложение может создавать и потреблять сообщения, но начиная с некоторого времени go мы заметили очень странную проблему.

Кажется, что журналы ActiveMQ удаляются, но их FD открываются (ActiveMQ Java process), поэтому Linux не может очистить эти файлы. В конце мы имеем утечку пространства, которая является плохой.

[root@server dirty.index#] lsof | grep -o "/home/.*" | grep deleted | sort | uniq
/home/activemq/activemq-data/000000126ecb3f49.log (deleted)
/home/activemq/activemq-data/00000012750b4590.log (deleted)
[root@server activemq-data#] lsof | grep -o "/home/.*" | grep deleted | wc -l
280

Это происходит только на главном узле. После перезапуска узла новый мастер выбирается и все эти файлы удаляются. У нового мастера та же проблема.

Мы включили TRACE уровень журнала для ActiveMQ - не повезло, ничего подозрительного (ну, или мы что-то упустили). Очереди не большие, максимум 5-6 сообщений. Все сообщения потребляются быстро. Там нет очевидных сообщений об ошибках. APM также не показывает ничего подозрительного

ReplicatedLevelDB config:

<persistenceAdapter>

    <replicatedLevelDB
      directory="activemq-data"
      replicas="5"
      bind="tcp://0.0.0.0:61619"
      zkAddress="xx.xxx.xx.30:2181,xx.xxx.xx.31:2181,xx.xxx.xx.32:2181,xx.xxx.xx.33:2181,xx.xxx.xx.34:2181"
      zkPassword=""
      zkSessionTimeout="3s"
      zkPath="/xxx02"
      sync="quorum_mem"
      hostname="some.server"
      />

</persistenceAdapter>

Нет недавних изменений в конфигурации ActiveMQ.

Мы застряли на данный момент. Что мы могли бы проверить больше?

1 Ответ

1 голос
/ 05 февраля 2020

Хранилище LevelDB в ActiveMQ устарело уже пару лет и не поддерживалось и не поддерживалось сообществом. Вероятно, вы столкнулись с скрытой ошибкой в ​​реализации, которая, скорее всего, не будет исправлена, так как LevelDB, вероятно, будет полностью удален в выпуске 5.17.0. Я бы посоветовал перейти в магазин KahaDB или заглянуть в ActiveMQ Artemis, если вам нужна репликация и HA.

...