首页 > 解决方案 > ActiveMQ Artemis 服务因 AMQ144002 关闭:推送打开的文件时出错

问题描述

Artemis Cluster 中配置了 Master 和 Slave 服务器。主服务已关闭,服务输出日志中出现以下异常:

2020-12-07 10:45:40,717 ERROR [org.apache.activemq.artemis.journal] AMQ144002: Error pushing opened file: ActiveMQIOErrorException[errorType=IO_ERROR message=AMQ149000: failed to rename file activemq-data-495656.amq.tmp to activemq-data-495656.amq]
    at org.apache.activemq.artemis.core.io.AbstractSequentialFile.renameTo(AbstractSequentialFile.java:160) [artemis-journal-2.11.0.jar:2.11.0]
    at org.apache.activemq.artemis.core.journal.impl.JournalFilesRepository.createFile0(JournalFilesRepository.java:633) [artemis-journal-2.11.0.jar:2.11.0]
    at org.apache.activemq.artemis.core.journal.impl.JournalFilesRepository.createFile(JournalFilesRepository.java:574) [artemis-journal-2.11.0.jar:2.11.0]
    at org.apache.activemq.artemis.core.journal.impl.JournalFilesRepository.takeFile(JournalFilesRepository.java:535) [artemis-journal-2.11.0.jar:2.11.0]
    at org.apache.activemq.artemis.core.journal.impl.JournalFilesRepository.pushOpenedFile(JournalFilesRepository.java:486) [artemis-journal-2.11.0.jar:2.11.0]
    at org.apache.activemq.artemis.core.journal.impl.JournalFilesRepository$1.run(JournalFilesRepository.java:92) [artemis-journal-2.11.0.jar:2.11.0]
    at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:42) [artemis-commons-2.11.0.jar:2.11.0]
    at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:31) [artemis-commons-2.11.0.jar:2.11.0]
    at org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:66) [artemis-commons-2.11.0.jar:2.11.0]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [rt.jar:1.8.0_271]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [rt.jar:1.8.0_271]
    at org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) [artemis-commons-2.11.0.jar:2.11.0]

2020-12-07 10:45:40,717 WARN  [org.apache.activemq.artemis.core.server] AMQ222010: Critical IO Error, shutting down the server. file=NULL, message=unable to open : ActiveMQIOErrorException[errorType=IO_ERROR message=AMQ149000: failed to rename file activemq-data-495656.amq.tmp to activemq-data-495656.amq]
    at org.apache.activemq.artemis.core.io.AbstractSequentialFile.renameTo(AbstractSequentialFile.java:160) [artemis-journal-2.11.0.jar:2.11.0]
    at org.apache.activemq.artemis.core.journal.impl.JournalFilesRepository.createFile0(JournalFilesRepository.java:633) [artemis-journal-2.11.0.jar:2.11.0]
    at org.apache.activemq.artemis.core.journal.impl.JournalFilesRepository.createFile(JournalFilesRepository.java:574) [artemis-journal-2.11.0.jar:2.11.0]
    at org.apache.activemq.artemis.core.journal.impl.JournalFilesRepository.takeFile(JournalFilesRepository.java:535) [artemis-journal-2.11.0.jar:2.11.0]
    at org.apache.activemq.artemis.core.journal.impl.JournalFilesRepository.pushOpenedFile(JournalFilesRepository.java:486) [artemis-journal-2.11.0.jar:2.11.0]
    at org.apache.activemq.artemis.core.journal.impl.JournalFilesRepository$1.run(JournalFilesRepository.java:92) [artemis-journal-2.11.0.jar:2.11.0]
    at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:42) [artemis-commons-2.11.0.jar:2.11.0]
    at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:31) [artemis-commons-2.11.0.jar:2.11.0]
    at org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:66) [artemis-commons-2.11.0.jar:2.11.0]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [rt.jar:1.8.0_271]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [rt.jar:1.8.0_271]
    at org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) [artemis-commons-2.11.0.jar:2.11.0]

标签: activemq-artemis

解决方案


ActiveMQ Artemis 将在任何被视为“严重”的 IO 错误时自行关闭。这是因为如果代理不能与底层的持久存储一起工作,它本质上是毫无价值的。因此,最好只是关闭并修复潜在问题,而不是继续尝试 IO 操作并失败。

在这种情况下,代理尝试重命名日志文件之一,但重命名操作失败。如果由于任何原因重命名失败,调用中的代理java.io.File.renameTo(File)将返回。false不幸的是renameTo,没有说明重命名失败的原因。

由于您使用的是 HA,所有客户端都应故障转移到备份并继续正常运行。我的建议是检查文件系统是否存在潜在问题,并在准备好后重新启动主代理。


推荐阅读