具有ReplicatedLevelDB存储的ActiveMQ使日志文件的文件描述符保持打开状态,因此操作系统无法释放空间

具有ReplicatedLevelDB存储的ActiveMQ使日志文件的文件描述符保持打开状态,因此操作系统无法释放空间,activemq,leveldb,Activemq,Leveldb,我们使用的是ActiveMQ 5.11.1节点集群(由Zookeepers保护)。节点使用ReplicatedLevelDB存储。应用程序能够生成和使用消息,但从一段时间前开始,我们注意到一个非常奇怪的问题 似乎ActiveMQ日志已被删除,但它们的FD已打开(通过ActiveMQ Java进程),因此Linux无法清理这些文件。最后,我们有一个空间泄漏,这是很糟糕的 [root@server dirty.index#] lsof | grep -o "/home/.*" | grep dele

我们使用的是ActiveMQ 5.11.1节点集群(由Zookeepers保护)。节点使用ReplicatedLevelDB存储。应用程序能够生成和使用消息,但从一段时间前开始,我们注意到一个非常奇怪的问题

似乎ActiveMQ日志已被删除,但它们的FD已打开(通过ActiveMQ Java进程),因此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)
这只发生在主节点上。重新启动节点后,将选择一个新的主节点,并删除所有这些文件。新主人也有同样的问题

我们已经为ActiveMQ启用了
TRACE
log-level-没有运气,没有可疑之处(或者我们遗漏了一些东西)。队列不大,最多5-6条消息。所有消息都很快被消耗掉。没有明显的错误消息。APM也没有显示任何可疑的东西

ReplicatedLevelDB配置:


ActiveMQ配置中没有最近的更改


我们现在陷入困境。我们还可以检查哪些内容?

ActiveMQ中的LevelDB存储区已经被弃用了好几年,并且没有社区支持或维护。很可能您在实现中遇到了一个潜在的bug,该bug很可能不会得到修复,因为LevelDB可能会在5.17.0版本中被完全删除。如果您需要复制和HA,我建议您转移到KahaDB商店或查看ActiveMQ Artemis

因为它的价值,LevelDB早在2016年11月就被ActiveMQ弃用了。很好地总结了形势。考虑到这一点,我不确定你能找到多少帮助。
[root@server activemq-data#] lsof | grep -o "/home/.*" | grep deleted | wc -l
280