ActiveMQ 永远不会删除 kahadb .log 文件;通过 JSP 界面没有可见的待处理消息;如何查出罪魁祸首?

Tho*_*ood 5 java apache activemq-classic

我们在 CentOS 上运行 ActiveMQ 5.7.0。大约 50 个 Java 程序写入和使用队列,其中大约一半来自本地主机,其余分散在远程客户端,大多数每个进程有一个消费者,但有四个有 32 个。

几天前,ActiveMQ 停止从 data/kahadb 删除 .log 文件。如果重新启动,ActiveMQ 会删除 kahadb 中的所有内容,然后在操作期间不会删除任何其他内容。

通过 [host]:8161/admin/queues.jsp 的 Web 界面看不到待处理(即已排队但未出队)的消息。DLQ为空,删除不影响问题。(也从界面中收集到:所有连接都是活动的,没有一个是慢的,没有订阅者,没有网桥,没有调度程序。)

在http://activemq.apache.org/why-do-kahadb-log-files-remain-after-cleanup.html之后,我得到了以下内容:

| 追踪 | 最后更新:236:28401525,完整的GC候选集:[89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100 <[snip]> , 236 | org.apache.activemq.store.kahadb.MessageDatabase | org.apache.activemq.store.kahadb.MessageDatabase | ActiveMQ 日志检查点工作人员 2014-09-11 08:50:03,384 | 追踪 | 第一次 tx 后的 gc 候选者:89:10178611,[] | org.apache.activemq.store.kahadb.MessageDatabase | org.apache.activemq.store.kahadb.MessageDatabase | ActiveMQ 日志检查点工作人员 2014-09-11 08:50:03,384 | 追踪 | gc 候选人: [] | org.apache.activemq.store.kahadb.MessageDatabase | org.apache.activemq.store.kahadb.MessageDatabase | ActiveMQ 日志检查点工作器

其中 db-89.log 是 ActiveMQ 重新启​​动后创建的第一个日志文件,db-236.log 是当前存在的最新文件。

ActiveMQ 日志中没有其他错误或警告。关于使用队列的程序,没有一致报告的异常。我公司的程序在本地主机上根据其日志正在发布事务。如果第三方程序没有发布交易,我不知道如何找到它。

鉴于这一切,我如何查明或缩小问题的可能原因?哪些附加信息会有用?

作为一个额外的限制,访问客户端计算机及其程序是一个业务问题。我在那里没有帐户,管理员位于不同的国家/地区,这会减慢沟通速度。如果我必须联系他们,我想预先向他们提供所有可能的信息。

非常感谢。

Tho*_*ood 4

我们通过调查 ActiveMQ 源代码来了解该片段来解决该问题:

第一次发送后的GC候选者:89:10178611

结果,89 是日志文件名 (db-89.log),10178611 是文件中的偏移量。因此,我们转储日志文件:

xxd -g1 db-89.log | less
Run Code Online (Sandbox Code Playgroud)

然后我们对偏移量进行文本搜索(转换为十六进制)。在转储中,存在带有挂起事务的队列的人类可读名称及其来自的服务器。

我无权访问有问题的服务器或代码,但管理员非正式地告诉我,他们的开发人员“修复”了交易的关闭,无论修复是什么。这解决了问题。