高XMX:java.lang.outofmemory本机内存分配(malloc)无法为ChunkPool :: allocate分配32756字节

时间:2019-09-05 17:04:47

标签: java jvm heap-memory

我确实在网上搜索了此问题,但找不到可能的解决方案或解释。
我们有一个具有8 GB RAM,64位,开放JDK 1.8的CentOS 6 VM。我们正在尝试使用-Xmx6000M运行Java程序。
它只是在启动时崩溃,并显示以下内存不足错误:

native memory allocation (malloc) failed to allocate 32756 bytes for ChunkPool::allocate

它仅执行代码的开头几行(那里没有足够的内存分配<500MB)并连续崩溃。

有趣的是,如果我将-Xmx更改为3000M,它将开始正常工作,并且我的程序已启动并且一切正常。
据我了解,Xmx表示JVM可以达到的最大堆内存,它是按需分配的。因此,即使JVM没有达到1 GB的堆,我也无法弄清楚它是怎么导致崩溃的?如何减少Xmx来解决它?
我知道如果操作系统无法提供所需的内存,JVM可能会因OOM而崩溃,但是这里的操作系统总是有3 GB以上的可用内存。

请咨询。

/ etc / proc / meminfo的输出是:

MemTotal:        8061104 kB
MemFree:         4905068 kB
Buffers:          172920 kB
Cached:          1828412 kB
SwapCached:            0 kB
Active:          1751828 kB
Inactive:        1129956 kB
Active(anon):     872840 kB
Inactive(anon):    58348 kB
Active(file):     878988 kB
Inactive(file):  1071608 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       4194300 kB
SwapFree:        4194300 kB
Dirty:                24 kB
Writeback:             0 kB
AnonPages:        880488 kB
Mapped:           334788 kB
Shmem:             50740 kB
Slab:             133388 kB
SReclaimable:      92196 kB
SUnreclaim:        41192 kB
KernelStack:        6880 kB
PageTables:        23236 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     8224852 kB
Committed_AS:    1534484 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      185660 kB
VmallocChunk:   34359545792 kB
HardwareCorrupted:     0 kB
AnonHugePages:    493568 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      251904 kB
DirectMap2M:     7088128 kB
DirectMap1G:     1048576 kB

更新 我们注意到此操作系统上的交换内存无法正常工作的一件事,它始终显示已使用0 KB。这可能是OOM的潜在原因吗?

1 个答案:

答案 0 :(得分:1)

Java HotSpot VM分为3个内存空间(Java Heap,PermGen,C-Heap)。对于32位VM,所有这些内存空间在内存之间相互竞争。增加Java Heap空间(使用-Xmx)将进一步减少C-Heap的容量并从OS保留更多内存。

这也是为什么将-Xmx减少到3000M会使程序正常工作的原因。

有关更多详细信息,请参见 https://javaeesupportpatterns.blogspot.com/2012/03/outofmemoryerror-out-of-swap-space.html