阿里生产故障专题06
本文排查了一例RocketMQ应用因Netty频繁申请堆外内存导致OS OOM的问题。根本原因为多个ClassLoader加载了多个Netty的PooledByteBufAllocator实例,各自独立占用堆外内存,总使用量远超MaxDirectMemorySize限制。虽单个Allocator受1G限制,但7个实例叠加致整体超限,且Netty通过Unsafe直接分配内存,绕过JVM管控,最终引发系统级OOM。
应用架构图
技术架构是将业务需求转化为技术实现的关键过程,涵盖分层设计、技术选型与系统集成。包括单体架构的四层模型(表现、业务、数据、基础)与分布式架构下的服务调用关系,明确内外系统边界,支撑应用高效协同与扩展。
RocketMQ:底层Netty频繁OS OOM
本文记录了一例Java应用因多ClassLoader加载多个Netty的PooledByteBufAllocator导致堆外内存超限、触发OS OOM的排查过程。通过NMT、Arthas等工具分析,发现7个不同类加载器各自维护堆外内存配额,绕过JVM直接内存管控,最终总占用远超MaxDirectMemorySize设置。建议短期调整堆大小以保障可用性,长期推动中间件优化。
RabbitMQ介绍
RabbitMQ是基于Erlang开发的开源消息中间件,实现应用程序间的异步通信。核心组件包括生产者、消费者、队列、交换机和虚拟主机,支持消息路由与隔离。通过管理控制台可便捷运维。官网:https://www.rabbitmq.com/
应用架构图
技术架构是将业务需求转化为技术实现的关键桥梁,基于应用架构明确技术分层、框架、语言及关键技术选型。涵盖单体四层结构(表现、业务、数据、基础)与分布式环境下应用间服务调用及外部系统集成,清晰界定内外部调用关系与边界,形成完整的技术架构体系。(238字)
应用架构图
技术架构是将业务需求转化为技术实现的关键过程,涵盖分层设计、技术选型与系统间关系梳理。本文详解单体与分布式架构,包括展现层、业务层、数据层及基础层的职责,以及应用内外调用关系与边界划分,助力构建清晰的技术体系。
应用架构图
技术架构是将业务需求转化为技术实现的桥梁,涵盖分层设计、技术选型与系统间关系。包括单体四层结构(表现、业务、数据、基础层)与分布式架构中的应用调用及外部系统集成,明确边界与通信逻辑,支撑系统高效演进。
RocketMQ:底层Netty频繁OS OOM
本文记录了一例Java应用因Netty多ClassLoader加载导致堆外内存超限引发OS OOM的排查过程。通过NMT、Arthas等工具分析,发现多个中间件独立加载PooledByteBufAllocator,各自绕过MaxDirectMemorySize限制,累计占用远超1G堆外内存。最终定位RocketMQ客户端为主要内存使用者,建议短期调小Java堆以腾出空间,并推动中间件优化。
每日必会1
微服务并非绝对优于单体,需结合业务。简单场景下单体更轻便;复杂业务链路适合微服务,解耦利于扩展。常用中间件:Nacos(注册/配置中心)、OpenFeign(远程调用)、Gateway(网关)。Nacos支持心跳机制,临时实例异常则剔除,非临时实例不剔除,且支持服务变更推送,集群可切CP/AP模式。负载均衡常用轮询、加权轮询等。
每日必会
微服务并非绝对优于单体,需结合业务场景。简单业务用单体更轻量,无分布式复杂问题;复杂业务链路适合微服务,解耦利于扩展。常用中间件如Nacos(注册/配置中心)、OpenFeign(远程调用)、Gateway(网关)。Nacos通过心跳机制管理实例,临时实例异常即剔除,非临时实例主动探测。负载均衡常用轮询、加权轮询等。