JVM 的堆大小不断增加(但 usedMemory() 不断减少)
Posted
技术标签:
【中文标题】JVM 的堆大小不断增加(但 usedMemory() 不断减少)【英文标题】:JVM's heap size keeps increasing (but usedMemory() keeps decreasing) 【发布时间】:2019-10-29 16:41:44 【问题描述】:我有一个在 eJDK 1.8.201
上运行的 Java 应用程序。我观察到系统报告的java进程的RSS使用率不断增加,它将达到物理内存512M
的90%以上,我的代码将重新启动系统。另一方面,我定期从代码中打印出的usedMemory()
表明它始终在不超过物理内存的 37% 的有限范围内波动(意味着 190M)。据我了解,这意味着 JVM 没有将其可用内存返回给操作系统。这种理解正确吗?我设置了-Xmx=256M -Xms=256M
,所以我认为-Xmx
选项不起作用。
您对发生的事情以及如何解决问题有任何想法吗?
该系统是ARMv7
板上的嵌入式Linux。
【问题讨论】:
看来越来越大的内存消耗不是堆内存。 如果不是堆,那是什么?谢谢 有不同的可能性,堆栈、直接缓冲区、代码缓存、只是本机代码分配的内存等 它很可能被堆外内存消耗waitingforcode.com/off-heap/on-heap-off-heap-storage/read 您应该检查您的依赖关系并查看它们的堆外内存使用情况 我知道在jdk中有一些工具可以dump heap,比如jhat、jcmd。有人知道 ejdk 中是否有任何工具(来自 oracle 的嵌入式 JDK)可以让我转储并分析增加的内存在哪里使用?谢谢。 【参考方案1】:-Xmx=512M
和 -Xms=512M
是无效标志。应将它们更改为 -Xmx512M
和 -Xmx512M
。
【讨论】:
以上是关于JVM 的堆大小不断增加(但 usedMemory() 不断减少)的主要内容,如果未能解决你的问题,请参考以下文章