RocketMQ:底层Netty频繁OS OOM
本文记录了一例Java应用因多ClassLoader加载多个Netty的PooledByteBufAllocator,导致堆外内存超限引发OS OOM的排查过程。虽设MaxDirectMemorySize为1G,但7个独立实例各自占用近1G,总量远超限制。通过NMT、Arthas等工具定位问题,最终确认为中间件类加载隔离所致。建议短期调小堆内存腾出空间,长期推动中间件优化。
深度解读 RocketMQ 存储机制
RocketMQ 实现了灵活的多分区和多副本机制,有效的避免了集群内单点故障对于整体服务可用性的影响。存储机制和高可用策略是 RocketMQ 稳定性的核心,社区上关于 RocketMQ 目前存储实现的分析与讨论一直是一个热议的话题。本文想从一个不一样的视角,着重于作者眼中的这种存储实现是在解决哪些复杂的问题,因此我从本文最初的版本中删去了冗杂的代码细节分析,由浅入深的分析存储机制的缺陷与优化方向。
RocketMQ:底层Netty频繁OS OOM
本文记录了一例Java应用因多ClassLoader加载多个Netty的PooledByteBufAllocator导致堆外内存超限、触发OS OOM的排查过程。通过NMT、Arthas等工具分析,发现7个不同类加载器各自实例化独立的分配器,均不受MaxDirectMemorySize全局限制,最终总堆外内存远超预期。根因在于Netty使用Unsafe直接申请内存,绕过JVM监管。短期建议调低堆内存以腾出空间,长期需中间件协同优化。
多维度对比5款主流分布式MQ消息队列
从17个维度综合对比Kafka、RabbitMQ、ZeroMQ、RocketMQ、ActiveMQ这5款当前最主流的MQ消息中间件产品,希望能为您的下一次产品的架构设计和MQ消息中间件选型提供参考依据。