关于linux下java进程内存占用大于Xmx设置,且一直提升

本文探讨了Java游戏服务器中遇到的内存问题,包括堆内存、堆外内存的管理,以及如何通过调整JVM参数、引入tcmalloc库和更换JDK版本来解决内存持续增长的难题。

服务器很久前出现了这个问题, 

网上查了一大堆

1,java进程的内存占用大概是 堆内存+堆外内存(DirectBufferSize)+JVM的一些占用

2, -Xmx设置的是堆内存, 如果不具体指定 -XX:MaxDirectMemorySize(堆外内存),也相当于设置了XX:MaxDirectMemorySize

3,可以用pmap -x pid来查看具体内存使用, 用/proc/{pid}/smaps 来更详细查看

 

不过,发现用-XX:MaxDirectMemorySize设置了之后, 还是没效果

继续查,发现有glibc的问题, 需要安装tcmalloc,在启动参数里面增加 export LD_PRELOAD=/usr/local/lib/libtcmalloc.so(根据你的安装位置),  但是只解决了虚拟内存高,实际内存还在增加

https://www.sohu.com/a/200462136_505827

 

最终发现, jdk版本 1.7.80 等几个版本, 有一些java.util.zip.Deflate.init() 方面的内存不释放的bug(我也没仔细排查),

用jdk 1.7.76替换之, 运行游戏服务器7天, 内存没继续上升

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值