【发布时间】: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)可以让我转储并分析增加的内存在哪里使用?谢谢。