Java 应用内存不断增长

345 天前
 zx9481

启动参数如下

java -server -Xms2048m -Xmx2048m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/xxx/heapError -jar xxx.jar --spring.profiles.active=prod --server.port=9551

项目启动一周后内存就已经 2.6g 了。。。也没有出现过 oom 异常,请教大家应该如何排查解决呢?

9101 次点击
所在节点    Java
64 条回复
miniliuke
345 天前
堆 dump 看看
twofox
345 天前
dump 下来去分析内存
zed1018
345 天前
找算命先生测算一下
cxshun
345 天前
超出堆内存大小,应该就是堆外内存的问题了。用上面兄弟的 jmap dump 出来看看。但要注意会触发 FGC 。
me1onsoda
345 天前
xmx 限制了,那就是堆外泄露了呗
visper
345 天前
没挂能跑就行,管它呢。配置的 Xmx 只是堆内存大小,jvm 自己使用的内存,文件句柄啊,线程本身内存啊的都不在这里。
dengji85
345 天前
蹲一下解决方案,我有个开发的应用也是这样,时间越长内存越高,慢慢稳定在约束的最大内存,永远不会自动是释放内存,推测是写代码习惯问题,导致对象得不到释放
cnzjl
345 天前
arthas 在线看一下内存占用情况
halov
345 天前
我们公司现在使用 消息中间件 nats 也有这种问题 😅
cheng6563
345 天前
管他呢,搞个定时重启完事
chenPiMeiHaoChi
345 天前
查查有没有静态的集合,一般这种稳定增长的就是静态 map 或者 list 越来越大。不过我也建议写个定时重启算了。
timeisweapon
345 天前
这个得看你的项目有多大,小项目内存持续增大,大概率是代码问题,没有及时释放内存,需要看 dump
wxw752
345 天前
巧了,我写的其中一个 netty 也是这样,后来实在找不到问题了,每两个月重启一下
salmon5
345 天前
每天重启下就好了,java 就这样的
jorneyr
345 天前
@wxw752 巧了,我写的其中一个 netty 也是这样,后来实在找不到问题了,每两个月重启一下

Netty 大量使用了堆外内存。
kaedea
345 天前
hprof
salmon5
345 天前
启动参数加上-XX:NativeMemoryTracking=summary ,然后 jcmd pid VM.native_memory 分析下
Shinu
345 天前
巧了, 我也遇到过这个问题, 不过增长的慢, 离职了都没想着去解决这个问题. 蹲下排查方法
starlin
345 天前
别理解错了,xmx 只限制了堆的最大值,还有非堆,线程栈,代码缓存,jvm 本身运行所需要的内存等,如有必要可以配置 NMT 进行分析,但是注意有性能损耗
676529483
345 天前
mark 等个大佬,公司项目也是,看 arms 堆内存+非堆不到占用的内存,怀疑堆外又没办法排查,最后只能重启

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1007983

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX