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

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

网上查了一大堆

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天, 内存没继续上升

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值