Netty短时间内大量写消息导致的内存问题

探讨了在使用Netty服务器作为游戏服务器时,因业务线程过多导致直接内存溢出,进而使用到swap内存空间的问题。分析了问题原因在于业务线程与workerIO线程数量失衡,消息堆积,提出增加workerIO线程、扩充内存及限制队列容量等解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.简化场景: 使用netty服务器作为游戏服务器,100个业务写线程,cpu核心个netty worker Io读写线程,在某个时刻,发现某台机器内存被耗尽,使用到了swap 交换空间

问题: 为何那个时刻直接内存被耗尽,导致使用到了swap内存空间

答案:线下复现发现,当最极端100个业务线程全部用来向channel写消息的时候,这些消息(通过直接内存申请的消息)进入到了netty worker IO线程的队列里面,等待IO线程进行网络IO,由于这个业务线程的数量远大于worker IO线程的数量,造成消息堆积在worker IO线程的队列中,不断积累,自然直接内存就溢出了

解决方案: 1.增加worker IO线程的数量,2.增加机器内存数量让他能够应付峰值 3.限制worker IO队列最大的容量,大于这个容量的消息直接拒绝(影响业务,不推荐)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值