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
相关产品推荐
相关产品推荐

