RocketMQ:底层Netty频繁OS OOM
本文记录了一例Java应用因Netty多ClassLoader加载导致堆外内存超限引发OS OOM的排查过程。根本原因为多个中间件通过不同ClassLoader加载了独立的PooledByteBufAllocator实例,各自绕过JVM直接内存限制,致使总占用远超MaxDirectMemorySize。结合Arthas、NMT等工具分析定位,最终确认RocketMQ客户端为主要内存消耗者,并提出短期调整堆内存配比、长期优化中间件的解决方案。
MQ篇
本项目采用RabbitMQ、Kafka和EMQ实现异步通信与数据采集。RabbitMQ用于服务解耦、流量削峰,支持多种消息模式与高可用集群;Kafka处理高吞吐用户行为数据,保障实时推荐与数据同步;EMQ基于MQTT协议实现物联网设备与服务器间可靠通信,支持QoS分级与延迟发布,确保消息不丢不重。三者协同提升系统性能与稳定性。
异步消息组件MQ基础
本课程介绍MQ的应用场景及RabbitMQ入门,涵盖同步与异步调用区别、消息队列的解耦与流量削峰作用,学习RabbitMQ收发消息、交换机类型、队列特性及在商城项目中的应用。
RocketMQ:底层Netty频繁OS OOM
本文记录了一例Java应用因Netty多ClassLoader加载导致堆外内存超限引发OS OOM的排查过程。通过NMT、Arthas等工具定位到多个PooledByteBufAllocator实例各自独立占用堆外内存,最终超出容器限制。建议业务调优JVM参数并推动中间件优化。
异步消息组件MQ基础
本课程介绍MQ的应用场景及RabbitMQ入门,涵盖同步与异步调用区别、消息队列模型、交换机类型(Fanout、Direct、Topic)、惰性与优先级队列特性,以及消息堆积解决方案,并结合商城项目实践,帮助掌握高效解耦、流量削峰等核心技能。
Day04
本文介绍了MQ在异步通信与系统解耦中的典型应用,如订单支付后通知配送中心;讲解了RabbitMQ的四种交换机模式,项目中采用Topic模式;并深入探讨了消息不丢失机制,涵盖生产者确认、消息持久化与消费者ACK策略;同时涉及延迟消息实现方式及消息积压解决方案。
MQ篇
本文介绍了RabbitMQ、Kafka和EMQ在项目中的应用及核心机制。涵盖消息队列选型原因、异步通信场景、高可用设计,并重点解析了消息不丢失、重复消费、顺序性保障等关键问题的解决方案,展示了三种主流消息中间件的实践对比与优化策略。
RocketMQ:底层Netty频繁OS OOM
本文记录了一例Java应用因Netty多ClassLoader加载导致堆外内存超限引发OS OOM的排查过程。通过NMT、Arthas等工具定位到多个PooledByteBufAllocator实例各自独立占用堆外内存,总量远超MaxDirectMemorySize限制,最终结合业务现状提出临时调优方案,为类似问题提供参考。