【发布时间】:2017-07-06 08:32:35
【问题描述】:
Java 1.8.0_131 + Windows Server 2012 R2。
'-Xmx=9000m'。但 Windows 任务管理器显示 java 进程使用超过 14 GB 内存。
NMT 显示“内部”消耗超过 4.5 GB 内存。为什么会出现这种情况?我知道为本地内存定义空间不是 Java 功能。但是有什么方法可以限制“内部”内存吗?
总计:保留=15782485KB,提交=14653869KB - Java 堆(保留=9216000KB,已提交=9216000KB) (mmap:保留=9216000KB,提交=9216000KB)
类(保留=1277553KB,提交=260193KB) (课程#37738) (malloc=11889KB #64612) (mmap:保留=1265664KB,提交=248304KB)
线程(保留=80528KB,提交=80528KB) (线程#79) (堆栈:保留=79872KB,提交=79872KB) (malloc=244KB #398) (竞技场=412KB #157)
代码(保留=166388KB,提交=55208KB) (malloc=10356KB #10526) (mmap:保留=156032KB,提交=44852KB)
GC(保留=340353KB,提交=340277KB) (malloc=3521KB #1861) (mmap:保留=336832KB,提交=336756KB)
编译器(保留=290KB,提交=290KB) (malloc=160KB #947) (竞技场=130KB #2)
内部(保留=4513559KB,提交=4513559KB) (malloc=4513495KB #7980353) (mmap:保留=64KB,提交=64KB)
符号(保留=52759KB,提交=52759KB) (malloc=48180KB #563951) (竞技场=4579KB #1)
本机内存跟踪(保留=134867KB,提交=134867KB) (malloc=108KB #1634) (跟踪开销=134759KB)
竞技场块(保留=190KB,提交=190KB) (malloc=190KB)
【问题讨论】:
-
请问你到底在做什么?我为RAM感到难过。一定是这么填的。奇怪的是它还没有呕吐^^。但实际上:你在做什么来造成这种情况?
-
实际上进程因为分配更多内存失败而导致OOME崩溃。这是一个企业系统的Java进程。它将大量对象加载到 Java 进程中。这就是它使用'-Xmx=9000m'的原因。但是我们发现 Java 进程消耗了大约 14.5 GB RAM,这几乎消耗了服务器 RAM 的大部分,并且 JVM 未能为 Java 进程分配更多内存。 NMT 输出显示内部类别消耗超过 4.5 GB 内存。