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

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队列最大的容量,大于这个容量的消息直接拒绝(影响业务,不推荐)

你可能感兴趣的:(netty)