RocketMQ:底层Netty频繁OS OOM
本文分析了一起RocketMQ应用因Netty频繁申请堆外内存导致OS OOM的问题。根本原因是多个ClassLoader加载了多个PooledByteBufAllocator实例,各自独立占用堆外内存,突破JVM的MaxDirectMemorySize限制。结合Arthas、NMT等工具深入排查,最终定位到rocketmq-client实例占用近1G堆外内存。建议短期调小Java堆以腾出空间,长期优化Netty内存使用与类加载机制。
C 语言并发编程核心原理与实践技巧
C语言虽无内置线程库,但可通过POSIX pthread实现Linux多线程并发,配合互斥锁与信号量解决数据竞争;在嵌入式场景中,FreeRTOS提供任务调度、消息队列等机制,满足实时性需求。本文详解从基础线程创建到同步控制,再到嵌入式实时落地的全流程,助你掌握高效稳定的C并发编程核心技能。
RocketMQ:底层Netty频繁OS OOM
本文详述RocketMQ因Netty多ClassLoader加载多个PooledByteBufAllocator,导致堆外内存超限引发OS OOM的排查过程,揭示底层内存管理机制及解决方案。
RocketMQ:底层Netty频繁OS OOM
本文记录了一例Java应用因多ClassLoader加载多个Netty的PooledByteBufAllocator导致堆外内存超限,引发OS OOM的排查过程。尽管MaxDirectMemorySize设为1G,但多个中间件独立占用堆外内存,总量远超限制。通过NMT、Arthas等工具定位到RocketMQ客户端为主要占用者。最终建议短期调小堆内存以腾出空间,并推动中间件优化。
异步消息组件MQ基础
本课程学习MQ应用场景及RabbitMQ入门,掌握同步与异步调用区别,理解消息队列的解耦、异步处理与流量削峰作用,熟悉RabbitMQ收发消息、多种交换机类型及队列特性,并应用于商城项目中。
为什么会选择使用RabbitMQ
选用RabbitMQ因其功能丰富,支持多种消息模式、延迟与惰性队列,天然集群高可用,性能优异且文档齐全。MQ提升吞吐、隔离故障、削峰填谷,降低耦合,但也增加架构复杂性,依赖Broker稳定性。
项目中哪里用到了RabbitMQ
本项目广泛使用RabbitMQ实现服务间异步通信,作为两大通信方式之一(另一为Feign同步调用),主要用于非查询类操作。如内容审核、验证码发送、用户行为采集、搜索记录保存、用户信息变更通知、页面静态化及MySQL、Redis、ES间数据同步,提升系统解耦与性能。