netty四种BUFFER的内存测试

使用Netty如何做到单机秒级接收35万个对象 单纯netty结合protostuff进行rpc对象传输的demo网上有很多,大部分都是一个模子刻出来的,一开始我也是抄了一个,本地测试畅通无阻,未发生任何异常。 部署预发环境,进行压测后,问题巨多,各种报错层出不穷。当然,压测时我用的数据量大、发送请求非常密集,单机是每秒前100ms发送2万个对象,其他900ms歇息,死循环发送,共计40台机器作为客户端,同时往2台netty Server服务器发送对象,那么平均每个server每秒大概要接收40万个对象,由于后面还有业务逻辑,逻辑每秒只能处理35万实测。 阅读详情

分别使用下面四种buffer测试

ByteBufoutBuf=UnpooledByteBufAllocator.DEFAULT.heapBuffer();

//ByteBufoutBuf=PooledByteBufAllocator.DEFAULT.heapBuffer();

//ByteBufoutBuf=PooledByteBufAllocator.DEFAULT.buffer();

//ByteBufoutBuf=UnpooledByteBufAllocator.DEFAULT.buffer();

 

outBuf=outBuf.order(ByteOrder.LITTLE_ENDIAN);

outBuf.writeInt(17);

outBuf.writeInt(112);

outBuf.writeShort(11);

outBuf.writeShort(5);

outBuf.writeBytes(bytes);

ctx.channel().writeAndFlush(outBuf);

 

 

UnpooledByteBufAllocator.DEFAULT.heapBuffer()

吞吐量:30144/秒





PooledByteBufAllocator.DEFAULT.heapBuffer() 

吞吐量:30327/秒

 

 

 

PooledByteBufAllocator.DEFAULT.buffer() 

吞吐量:32082/秒

 

 

 

 

 

UnpooledByteBufAllocator.DEFAULT.buffer()

吞吐量:32292/秒

 

 

可以发现PooledByteBufAllocator.DEFAULT.heapBuffer()情况使用的堆内存最多,为72.7MB,按理说,使用内存池可重用内存,理论上是最少的,看细细研究是这样的结论:

在启动程序时,设置了四个线程,

final DefaultEventExecutorGroupexecutorGroup = new DefaultEventExecutorGroup(4, new DefaultThreadFactory("decode-worker-thread-pool"));

 

netty避免每个线程对内存池的竞争,在每个线程都提供了PoolThreadCache线程内的内存池,

final classPoolThreadCache {

 

   finalPoolArena<byte[]> heapArena;

   finalPoolArena<ByteBuffer>directArena;

 

   // TODO: Test if adding padding helps undercontention

   //private long pad0, pad1, pad2, pad3,pad4, pad5, pad6, pad7;

 

   PoolThreadCache(PoolArena<byte[]> heapArena, PoolArena<ByteBuffer>directArena) {

        this.heapArena = heapArena;

        this.directArena = directArena;

   }

}

 

 

PoolArena里的PoolChunk初始化大小16MB,有四个线程,于是看到的就如图

 

网关gateway出现netty_data_buffer(OOM)内存溢出问题 阅读详情

相关推荐

如何设计一个高性能网关?

一、前言 最近在github上看了soul网关的设计,突然就来了兴趣准备自己从零开始写一个高性能的网关。经过两周时间的开发,我的网关ship-gate核心功能基本都已完成,最大的缺陷就是前端功底太差没有管理后台。 二、设计 2.1技术选型 网关是所有请求的入口,所以要求有很高的吞吐量,为了实现这点可以使用请求异步化来解决。目前一般有以下两种方案: Tomcat/Jetty+NIO+Servlet3 Servlet3已经支持异步,这种方案使用比较多,京东,有赞和Zuul,都用的是这种方案。 Net

Java圈全能架构师的博客 1402

SO_SNDBUF和SO_RCVBUF

含义 SO_SNDBUF:TCP发送缓冲区的容量上限; SO_RCVBUF:TCP接受缓冲区的容量上限; 注意:缓冲区的上限不能无限大,如果超过内核设置的上限值,则以内核设置值为准(sysctl -a命令查看)。 net.ipv4.tcp_rmem = 8192 87380 16777216 net.ipv4.tcp_wmem = 8192 65536 16777216 ...

04stone37 1万+

Netty内存池泄漏问题

为了提升消息接收和发送性能,Netty针对ByteBuf的申请和释放采用池化技术,通过PooledByteBufAllocator可以创建基于内存池分配的ByteBuf对象,这样就避免了每次消息读写都申请和释放ByteBuf。由于ByteBuf涉及byte[]数组的创建和销毁,对于性能要求苛刻的系统而言,重用ByteBuf带来的性能收益是非常可观的。 内存池是一把双刃剑,如果使用不当,很容易带来...

豆腐的魔法屋 843

netty和t-io对比测试结果

一,吞吐量和响应时间 netty:100秒内生成10000个连接,每个连接每隔2秒发送一条消息,每个连接总共发送200条消息,发消息请求99%的响应时间在1ms以内,其它请求95%的响应时间在10ms以内 t-io:100秒内生成10000个连接,每个连接每隔2秒发送一条消息,每个连...

chutiaogou5488的博客 1328

Java NIO与Netty高性能网络编程实战解析

I/O模型是网络编程的核心基础,从同步阻塞的BIO到多路复用的NIO,再到异步非阻塞的AIO,技术演进始终围绕提升吞吐量和降低延迟展开。NIO通过Buffer、Channel、Selector三大核心组件实现高效数据传输,其中ByteBuffer的指针设计避免了数据拷贝,FileChannel的零拷贝技术可提升文件传输效率300%。Netty作为NIO的高性能框架,其Reactor线程模型和内存池化机制,在高并发场景下相比原生NIO可提升吞吐量20%以上,广泛应用于金融交易、物联网等对实时性要求严格的领域。

weixin_33806914的博客 635

Netty ByteBuf 与 NIO ByteBuffer 对比:3个核心差异与性能基准测试

本文深入对比了Netty ByteBuf与NIO ByteBuffer的3个核心差异,包括索引管理、内存管理和零拷贝技术,并通过性能基准测试展示了Netty在高性能网络应用中的优势。文章详细解析了io.netty框架的缓冲区设计,帮助开发者优化网络应用的吞吐量和延迟表现。

weixin_30599769的博客 426

Netty从0到1系列之Buffer【下】

本文探讨了Java NIO Buffer的核心概念与性能优化。通过对比堆内存Buffer和直接内存Buffer的性能测试(1MB数据1000次迭代),结果显示直接内存Buffer快约100ms(1224ms vs 1324ms)。文章深入解析了Buffer的底层实现,包括内存结构和指针机制,并展示了HeapByteBuffer与DirectByteBuffer的关键代码区别。最佳实践部分建议采用Buffer池化、高性能文件读取技术,并避免常见陷阱。

编程技术圈 891

第二章Netty EmbeddedChannel 测试框架深度解析

EmbeddedChannel是Netty提供的用于单元测试ChannelHandler的特殊工具,可模拟网络环境测试编解码器、处理器等模块。它通过writeInbound/writeOutbound方法写入模拟数据,通过readInbound/readOutbound读取处理结果,支持测试TCP半包/粘包等场景。示例如下:1)测试固定长度帧解码器处理半包数据;2)测试出站编码器转换逻辑。使用finish()标记通道完成,配合断言验证处理结果。这种方式无需真实网络连接,能精准测试Handler链的协作关系,

ywl470812087的博客 139

Netty内存泄露

在测试中发现,当不停的开关Netty的NioClientSocketChannelFactory(比如大量连接失败重连等情况下),存在Direct Memory泄露。 测试代码: Java代码   for (int i = 0; i     ChannelFactory channelFactory = new NioClientSocketChannelFactory(

LIRENCONGZHONG的专栏 2424

KiCad插件安装太慢?试试华秋版,再手把手教你装这5个实用插件

本文介绍了KiCad华秋发行版如何解决插件安装慢的问题,并详细推荐了5个实用插件及其安装方法。华秋版优化了国内用户的下载速度,预装了常用扩展包,包括BOM生成器、3D模型增强工具等,显著提升PCB设计效率。

weixin_29184075的博客 549

6.2 磁悬浮轴承:软件架构与实现

本文系统阐述了磁悬浮轴承控制系统的软件架构与实现方法。采用分层架构设计,包括硬件抽象层、实时控制内核、控制算法层和应用层,确保系统实时性和可靠性。重点分析了电流环、位置环等关键控制任务的调度策略,比较了不同硬件平台(DSP、ARM、FPGA)的软件实现方案。强调模块化设计、配置化管理等工程实践,并详细介绍了从算法仿真到系统联调的完整开发流程。最后指出严格的测试验证是保证系统性能的关键,需通过多阶段测试评估起浮时间、稳态精度等核心指标。

技术工作者 755

Netty之Buffer(一)ByteBuf内存泄漏检测1

Netty channel看完看Buffer。 自从 Netty 4 开始,对象的生命周期由它们的引用计数( reference counts )管理,而不是由垃圾收集器( garbage collector )管理了。ByteBuf 是最值得注意的,它使用了引用计数来改进分配内存和释放内存的性能。–Netty官方文档翻译 引用计数是计算机编程语言中的一种内存管理技术,是指将资源(可以是对象、内存...

weixin_43257196 的博客 1676

【复现论文】Looking here or there? Gaze Following in 360-Degree Images

论文:Looking here or there?

RichardoMu的博客 1131

设置Netty接收Buff为堆内存模式

转自:https://sanwen8.cn/p/1bfoy1F.html Netty为了提升报文的读写性能,默认会采用“零拷贝”模式,即消息读取时使用非堆的DirectBuffer来减少ByteBuffer的内存拷贝,如下图所示: 如果需要修改接收Buffer的类型,例如从DirectByteBuf修改为HeapByteBuf,首先需要在初始化Channel的时候对

gddghs 1万+

Matlab图像处理频域滤波实现——高斯低通、高通、带通带阻滤波器

如果你想要进一步了解更多的相关知识,

小嘤熊的博客 1万+

Label Studio 图像分割自动标注接入教程:从模型预测到一键上传 Predictions

这篇文章详细介绍了如何使用Label Studio进行图像分割任务的自动标注流程。主要内容包括: 环境准备:安装Label Studio和模型推理依赖 项目配置:启动Label Studio服务,创建项目并配置BrushLabels标注界面 数据准备:导入待标注图片,获取API访问凭证 模型推理:运行训练好的分割模型生成预测mask 结果上传:将预测结果转换为Label Studio格式并通过API上传为Predictions 文章提供了完整的操作指南,包括: 详细的命令行参数说明 推荐的项目目录结构 标注

. 452

Netty进阶基础篇之NIO Buffer篇(3)

1、Buffer概念 1.1 缓冲区获取 Buffer缓冲区是就是一个数组,有着不同的数据类型:ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer,然后这些数据类型都可以通过a...

chuxie2576的博客 163

RT-Thread stm32h7使用串口DMA

stm32h7在rtthread中无法使用串口DMA,通过更改驱动代码使其支持串口DMA

qq_35141454的博客 2287

Netty报Direct buffer memory错误

最近在基于Netty实现NIO方面做应用底层通讯架构(服务发现,分布式,高可用,软负载)。遇到java.lang.OutOfMemoryError: Direct buffer memory内存溢出错误,查了很多网上材料都不好使,这里总结一下我的解决方案。 原因:Netty启用了堆外内存DirectByteBuffer实现了零拷贝,堆外内存对young gc免疫,只有在full gc的时候才被收

u010906369的专栏 1万+

【100%通过率】华为OD机试真题 Java&Go 实现【查找单入口空闲区域】【2022.11 Q4 新题】

给定一个 m xn 的矩阵,由若干字符 和0构成,X表示该处已被占据,0"表示该处空闲,请找到最大的单入口空闲区域.解释:空闲区域是由连通的O组成的区域,位于边界的0可以构成入口,单入口空闲区域即有目只有一个位于边界的0作为入口的由连通的'O"组成的区域。 如果两个元素在水平或垂直方向相邻,则称它们是“连通”的。

MISAYAONE的博客 2万+

STM32F407+OV2640的DCMI+DMA双缓冲JPEG图像采集系统

在嵌入式视觉系统中,数字摄像头接口(DCMI)是MCU连接CMOS图像传感器的关键硬件通道,其与DMA协同实现零CPU干预的高速数据流采集;而JPEG作为一种基于DCT变换与量化压缩的有损图像格式,依赖传感器端硬件编码引擎才能满足实时性要求。理解DCMI三重同步时序(PCLK/HSYNC/VSYNC)与DMA双缓冲机制的流水线协作原理,是突破带宽瓶颈、避免FIFO溢出和帧丢失的技术基础。该架构广泛应用于智能硬件、工业检测与边缘AI前端等需低功耗、高可靠图像捕获的场景,本文以OV2640与STM32F407为

weixin_42103128的博客 157

Netty 源码分析 08 buffer

Buffer 之 ByteBuf(一) Netty ByteBuf 相关的内容。它在buffer模块中实现,在功能定位上,它和 NIO ByteBuffer 是一致的,但是强大非常多

郭传志的博客 161

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JVM 堆外内存泄漏排查:从 Direct Buffer 到 Metaspace 的诊断全链路

堆外内存泄漏是 JVM 排查中最隐蔽的问题,核心原因是常规监控工具无法覆盖。本文的诊断链路为:NMT 定位泄漏区域 → JMX/Direct Buffer 指标量化 → Netty 泄漏检测定位代码 → 类加载器分析排查 Metaspace。预防层面,三个关键措施不可省略:Netty ByteBuf 的引用计数管理(必须配对release())、显式设置(避免无限制增长)、Metaspace 上限配置(

alex_goden的博客 1958

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

OutOfMemoryError: Cannot reserve 4194304 bytes of direct buffer memory Netty引起的堆外内存溢出OOM问题解决

通过DirectByteBuffer 分配内存时,可能会出现分配内存不够的情况,因此JVM如果发现堆外内存分配不足时,也会主动发起一次GC,只不过这次GC是通过System.gc() 实现的强制GC,但是在实际生产环境中我们都是通过JVM参数 -XX:+DisableExplicitGC,禁止使用System.gc()的,因此在实际使用过程中一定要注意分配内存的情况,避免出现内存泄漏。直接内存的申请相较堆内存慢,但是访问速度较快,对频繁使用的空间,使用直接内存可提升效率;(1)JVM内存模型。

东皋长歌的专栏 2816

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【Netty源码解读和权威指南】第13篇:Netty ByteBuf全解析(下)—— 内存池技术:Netty高性能的秘密武器

Netty内存池技术解析与性能优化实践 本文深入剖析Netty内存池技术(PooledByteBuf)的核心原理与实现,通过一个真实的高并发性能危机案例,揭示非池化内存管理的痛点:内存分配开销大、GC压力高、内存碎片等问题。文章详细解读了Netty内存池的三层架构设计(分配器PooledByteBufAllocator、内存区域PoolArena、内存块PoolChunk)及其高效的内存管理算法,包括jemalloc启发式的内存分配策略和线程本地缓存机制。 通过对比测试表明,使用内存池后性能提升300%,G

xyghehehehe的专栏 344
上一篇: AbstractReferenceCountedByteBuf 引用计数
下一篇: 可检查的功能比项目日报更有效
ChainCode
ChainCode 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄11年 115粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值