高并发下Netty4底层bug导致直接内存溢出分析

简介: 高并发下Netty4底层bug导致直接内存溢出分析

事故记录:

10点游戏开服,迅速冲破2300+单区同时在线

18点15分,运营反应玩家进不了,准备吃饭的人被抓回来排查故障

发现,由于直接内存被占满,一直在Full GC ,并且回收不掉,所以完全不处理玩家请求,通知运维重启服务器,临时解决。

2.考虑了下是不是把RPC连接数量改成了8条,超时改长了了导致,试着把数量减少,超时改成2个小时,发现直接内存随着时间推移还在增加。

3.把内存数据dump了一份下来,发现是netty底层占用比例大大超出了正常水平。

  • 输出缓冲区ChannelOutboundBuffer

,Recycler 占了很大比例,问了度娘,没什么有用的信息,找Google,用关键词" ChannelOutboundBuffer out of Direct memory full gc"

搜到一篇文章,发现和我遇到的情况基本一致 ,

Direct memory exhausted after sending many notifications

Recycler could cache infinite resources

Fix a bug where Recycler's capacity can increase beyond its maximum #3203

Netty.4.0.24.final版本有个bug,原因是因为缓冲区的数据如果超过了max_capacity的话,if(size==maxCapacity){....}永远不会成立,所以内存占用会无限扩增导致。

更新netty 4.0.25 final版本,继续观察。

可以参考 这篇文章 Netty使用案例 -发送队列积压导致内存泄漏(一)

目录
相关文章
|
1月前
|
存储 安全 Java
synchronized原理-字节码分析、对象内存结构、锁升级过程、Monitor
本文分析的问题: 1. synchronized 字节码文件分析之 monitorenter、monitorexit 指令 2. 为什么任何一个Java对象都可以成为一把锁? 3. 对象的内存结构 4. 锁升级过程 (无锁、偏向锁、轻量级锁、重量级锁) 5. Monitor 是什么、源码查看(hotspot虚拟机源码) 6. JOL工具使用
|
1月前
|
缓存 Java
Java中循环创建String对象的内存管理分析
Java中循环创建String对象的内存管理分析
38 2
|
1天前
|
机器学习/深度学习 缓存 算法
netty源码解解析(4.0)-25 ByteBuf内存池:PoolArena-PoolChunk
netty源码解解析(4.0)-25 ByteBuf内存池:PoolArena-PoolChunk
|
5天前
|
存储 缓存 NoSQL
Redis是一种高性能的内存数据库,常用于高并发环境下的缓存解决方案
【6月更文挑战第18天】**Redis摘要:** 高性能内存数据库,擅长高并发缓存。数据存内存,访问迅速;支持字符串、列表等多元数据类型;具备持久化防止数据丢失;丰富命令集便于操作;通过节点集群实现数据分片与负载均衡,增强可用性和扩展性。理想的缓存解决方案。
21 1
|
8天前
|
程序员 C语言 C++
【C语言基础】:动态内存管理(含经典笔试题分析)-2
【C语言基础】:动态内存管理(含经典笔试题分析)
|
8天前
|
程序员 编译器 C语言
【C语言基础】:动态内存管理(含经典笔试题分析)-1
【C语言基础】:动态内存管理(含经典笔试题分析)
|
1天前
|
缓存 Java Linux
Android 匿名内存深入分析
Android 匿名内存深入分析
6 0
|
25天前
|
JSON 数据管理 测试技术
自动化测试工具Selenium Grid的深度应用分析深入理解操作系统的内存管理
【5月更文挑战第28天】随着互联网技术的飞速发展,软件测试工作日益复杂化,传统的手工测试已无法满足快速迭代的需求。自动化测试工具Selenium Grid因其分布式执行特性而受到广泛关注。本文旨在深入剖析Selenium Grid的工作原理、配置方法及其在复杂测试场景中的应用优势,为测试工程师提供高效测试解决方案的参考。
|
1月前
|
SQL 资源调度 关系型数据库
实时计算 Flink版产品使用合集之可以使用高并发大内存的方式读取存量数据吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
缓存 Java 程序员
【项目日记(一)】高并发内存池项目介绍
【项目日记(一)】高并发内存池项目介绍
【项目日记(一)】高并发内存池项目介绍