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

Apache ActiveMQ Artemis高并发消息发送后无响应问题求助

排查Apache ActiveMQ Artemis 2.29.0批量发送消息后挂起问题

客户端发送逻辑排查

  • 检查JmsTemplate并行发送实现:JmsTemplate默认每次发送创建新会话,3万条并行发送可能瞬间创建大量连接/会话,耗尽Broker线程资源。需确认是否配置了JMS连接池,比如使用CachingConnectionFactory封装ActiveMQConnectionFactory,限制最大连接数、会话数,避免无限制创建资源。
  • 检查资源释放逻辑:确认发送代码无未释放的会话、连接资源,尽管JmsTemplate会自动管理,但高并发场景下配置不当仍可能引发泄漏。

Broker配置(broker.xml)排查

  • 连接与线程池配置:
    • 检查acceptor的connectionsAllowed属性:若未限制连接数,客户端瞬间发起大量连接会占满NIO线程,导致Broker无法处理CLI连接请求。建议根据服务器CPU核心数设置合理值(如CPU核心数*10)。
    • 核查thread-pools下的server、client线程池max-pool-size:若线程池过小,批量消息会导致任务积压,Broker线程阻塞无响应。
  • 持久化与队列配置:
    • 检查文件存储的journal-buffer-size、journal-file-size:批量发送时磁盘IO跟不上会阻塞Journal线程,建议调大journal-buffer-size(如从默认4MB改为16MB),优先使用SSD存储。
    • 确认address-settings中的max-size-bytes、page-size-bytes:若队列消息累积超过阈值触发分页,不合理的分页配置会引发IO阻塞,需确保page-size-bytes足够减少分页频率。
  • 管理线程配置:CLI连接依赖Broker管理线程,若management-thread-pool大小不足,会导致无法响应CLI命令,需检查该线程池的max-pool-size配置。

运行时状态排查

  • 通过JMX查看状态:用jconsole连接Broker默认JMX端口(1099),查看线程池负载、队列消息数、连接数、会话数,定位是否有线程阻塞或资源耗尽。
  • 检查系统文件句柄:Linux环境下执行ulimit -n确认当前限制,Broker处理大量连接、文件时可能耗尽句柄,导致无法创建新连接(含CLI连接),建议将文件句柄数调至65535以上。
  • 生成线程栈分析:执行jstack <Broker进程ID>获取线程dump,排查是否有线程阻塞在IO操作、锁竞争上,比如Journal写入线程是否长期阻塞。

官方perf client对比分析

artemis perf client采用池化连接/会话,发送逻辑经过优化,不会瞬间创建大量连接,这是它能正常运行的核心原因。你的Spring Boot代码若未做连接池优化,会引发连接数暴增,导致Broker资源耗尽。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:23:25