我確實在網上搜索了這個問題,但找不到可能的解決方案或解釋。我們有一個 CentOS 6 VM,具有 8 GB RAM、64 位、Open JDK 1.8。我們正在嘗試使用 -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 kBMemFree: 4905068 kBBuffers: 172920 kBCached: 1828412 kBSwapCached: 0 kBActive: 1751828 kBInactive: 1129956 kBActive(anon): 872840 kBInactive(anon): 58348 kBActive(file): 878988 kBInactive(file): 1071608 kBUnevictable: 0 kBMlocked: 0 kBSwapTotal: 4194300 kBSwapFree: 4194300 kBDirty: 24 kBWriteback: 0 kBAnonPages: 880488 kBMapped: 334788 kBShmem: 50740 kBSlab: 133388 kBSReclaimable: 92196 kBSUnreclaim: 41192 kBKernelStack: 6880 kBPageTables: 23236 kBNFS_Unstable: 0 kBBounce: 0 kBWritebackTmp: 0 kBCommitLimit: 8224852 kBCommitted_AS: 1534484 kBVmallocTotal: 34359738367 kBVmallocUsed: 185660 kBVmallocChunk: 34359545792 kBHardwareCorrupted: 0 kBAnonHugePages: 493568 kBHugePages_Total: 0HugePages_Free: 0HugePages_Rsvd: 0HugePages_Surp: 0Hugepagesize: 2048 kBDirectMap4k: 251904 kBDirectMap2M: 7088128 kBDirectMap1G: 1048576 kB更新 我們注意到此操作系統上的交換內存不起作用,它總是顯示已使用的 0 KB。這可能是 OOM 的潛在原因嗎?
1 回答

Helenr
TA貢獻1780條經驗 獲得超4個贊
Java HotSpot VM 分為 3 個內存空間(Java Heap、PermGen、C-Heap)。對于 32 位 VM,所有這些內存空間都會相互競爭內存。增加 Java 堆空間(使用 -Xmx)將進一步減少 C 堆的容量并為操作系統保留更多內存。
這也是為什么像您一樣將 -Xmx 減少到 3000M 會使您的程序正常工作。
添加回答
舉報
0/150
提交
取消