You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ActiveMQ Artemis进程被Critical Analyzer重启,QueueImpl无响应问题求助

ActiveMQ Artemis被Critical Analyzer重启:QueueImpl无响应排查方案

问题场景

ActiveMQ Artemis进程被Critical Analyzer触发重启,重启时日志输出如下:

Component org.apache.activemq.artemis.core.server.impl.QueueImpl is expired on path 3
AMQ224079: The process for the virtual machine will be killed, as component QueueImpl[name=01729809-eff0-11ed-bd3e-0a580a411ac1, postOffice=PostOfficeImpl [server=ActiveMQServerImpl::name=test], temp=true]@57556b5a is not responsive

已排查CPU、内存无异常,无其他有效日志可参考,需定位问题原因。

核心排查步骤

1. 临时队列的异常阻塞分析

日志中的队列是临时队列(temp=true),这类队列通常由JMS客户端(如请求响应模式、临时订阅)创建,重点排查:

  • 是否存在客户端创建临时队列后未正常关闭连接/会话,导致队列资源长期占用?
  • 临时队列的消费逻辑是否存在阻塞点?比如消费线程被外部资源(数据库、远程调用)卡住,无法响应Artemis内部的健康检测心跳。

2. 校验Critical Analyzer配置合理性

检查broker.xml中Critical Analyzer的核心参数,确认是否存在误判可能:

  • critical-analyzer-period:健康检测的时间间隔(默认30秒)
  • critical-analyzer-timeout:判定组件无响应的超时阈值(默认120秒)
  • critical-analyzer-check-period:单个组件的健康检查周期
    若阈值设置过小,可能将正常的慢处理误判为无响应,可适当调大critical-analyzer-timeout后观察是否复现。

3. 抓取线程栈快照定位阻塞点

下次问题触发前,手动执行jstack <Artemis进程PID>抓取JVM线程栈,重点分析:

  • 与QueueImpl相关的线程状态,是否存在BLOCKED或WAITING状态的线程?
  • 临时队列对应的消费线程栈,是否卡在某个外部调用环节?
    线程栈是定位无响应问题的关键,即使CPU、内存正常,线程阻塞也会导致组件无法响应内部检测。

4. 磁盘IO与消息堆积排查

  • 检查临时队列存储目录的磁盘读写延迟,是否存在IO瓶颈?高延迟会导致队列内部操作(如分页、清理)耗时过长,触发超时。
  • 确认临时队列是否存在未消费的消息堆积,堆积消息可能拖慢队列的健康检测响应速度。

5. 版本兼容性排查

确认当前Artemis版本是否存在QueueImpl相关的已知BUG,比如特定版本中临时队列在复杂场景下的死锁问题。可尝试升级至最新稳定版本,或核对官方问题列表是否有匹配案例。

内容的提问来源于stack exchange,提问作者pakolela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:33:16