java 超过 xmx_进程物理内存远大于Xmx的问题分析

本文探讨了Java进程物理内存(Res/Rss)为何会远超Xmx设置值的问题。Xmx仅限于新生代和老生代的最大值,不包括其他内存区域。当虚拟内存映射到物理内存时,可能会超出Xmx。文章提到了DirectByteBuffer可能导致的内存泄露,并介绍了如何使用工具分析内存分配,特别是动态库中的分配。通过跟踪,发现流量过大时,`java.util.zip.Deflater`的使用导致堆外内存增加,建议限制并发处理以避免OOM。

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

本文来自: PerfMa技术社区

PerfMa(笨马网络)官网

问题描述

最近经常被问到一个问题,”为什么我们系统进程占用的物理内存(Res/Rss)会远远大于设置的Xmx值”,比如Xmx设置1.7G,但是top看到的Res的值却达到了3.0G,随着进程的运行,Res的值还在递增,直到达到某个值,被OS当做bad process直接被kill掉了。

top - 16:57:47 up 73 days, 4:12, 8 users, load average: 6.78, 9.68, 13.31

Tasks: 130 total, 1 running, 123 sleeping, 6 stopped, 0 zombie

Cpu(s): 89.9%us, 5.6%sy, 0.0%ni, 2.0%id, 0.7%wa, 0.7%hi, 1.2%si, 0.0%st

...

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

22753 admin 20 0 4252m 3.0g 17m S 192.8 52.7 151:47.59 /opt/app/java/bin/java -server -Xms1700m -Xmx1700m -Xmn680m -Xss256k -XX:PermSize=128m -XX:MaxPermSize=128m -XX:+UseStringCache -XX:+

40 root 20 0 0 0 0 D 0.3 0.0 5:53.07 [kswapd0]

复制代码

物理内存大于Xmx可能吗

先说下Xmx,这个vm配置只包括我们熟悉的新生代和老生代的最大值,不包括持久代,也不包括CodeCache,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值