【问题标题】:How to deal with JVM OutOfMemoryError on Linux?如何处理 Linux 上的 JVM OutOfMemoryError?
【发布时间】:2012-03-14 16:00:30
【问题描述】:

Redhat Enterprise Linux 5.4 32 位 + Sun HotSpot JVM 6u5 32 位 + JVM 设置-Xms1536m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=512m

JVM 崩溃并出现以下错误:

java.lang.OutOfMemoryError:为 Chunk::new 请求了 828752 个字节。交换空间不足? 内部错误(allocation.cpp:218),pid=21557,tid=329534352 错误:块::新

java.lang.OutOfMemoryError:为 /BUILD_AREA/jdk6_05/hotspot/src/share/vm/utilities/growableArray.cpp 中的 grET 请求 383504 字节。交换空间不足? 内部错误 (allocation.inline.hpp:42),pid=16927,tid=334281616 错误:/BUILD_AREA/jdk6_05/hotspot/src/share/vm/utilities/growableArray.cpp 中的 grET

java.lang.OutOfMemoryError:为 /BUILD_AREA/jdk6_05/hotspot/src/share/vm/utilities/growableArray.cpp 中的 grET 请求 256000 字节。交换空间不足? 内部错误(allocation.inline.hpp:42),pid=16863,tid=334216080 错误:/BUILD_AREA/jdk6_05/hotspot/src/share/vm/utilities/growableArray.cpp 中的 GrET ..........

可能是JVM本身C/C++核心内存泄漏,C/C++内存使用达到JVM临界值,或者平台交换空间不足。

JVM自身C/C++核心内存泄漏如何处理?
Valgrind v3.7 无法与热点 JVM 6u5 一起使用。

【问题讨论】:

标签: java memory crash jvm memory-leaks


【解决方案1】:

这里的 JVM 崩溃只是误导。问题是进程耗尽了地址空间。您的“-Xmx2048m”对于当前可用的虚拟内存和/或一般特定的 32 位操作系统来说太大了。

在 32 位 Windows 下,任何进程最多只能寻址 ~1.6GB RAM。 其他操作系统取决于。 Linux 应该能够使用 ~3GB max。

在您的对象堆大小 (-Xmx) 之上,JVM 需要更多 RAM 用于堆栈、对象管理、gc 结构等。实际上,这会导致 32 位 Windows 系统上的最大堆大小约为 1100MB。

有关进程内存大小限制的更多详细信息,请参见例如 tis 博客文章:https://sinewalker.wordpress.com/2007/03/04/32-bit-windows-and-jvm-virtual-memory-limit

【讨论】:

  • A 32bit process can only address up to ~1.6GB RAMA 32bit process can only address up to ~1.6GB RAMA 32bit process can only address up to ~1.6GB RAMA 32bit process can only address up to ~1.6GB RAM@987654322 时,您是在具体谈论 Java 进程还是一般地谈论所有进程?
  • 事实上我把事情搞混了。 1,6GB 仅适用于 Windows,实际上这通常适用于进程。在 Linux、BSD 等其他操作系统上,情况有所不同。我会更新我的(误导性的)回复。
【解决方案2】:

它清楚地表明,您的 JVM 无法分配更多内存。可用(物理)内存为 0,因此您的系统正在使用交换。然后在某个时候,交换将充满已交换的内存页面,因此进一步的内存请求 (alloc) 将失败。

测试你的swap的使用情况
$ swapon -s 
Filename                Type        Size    Used    Priority
/dev/xvda2              partition   8386556 99312   -1

您可以随时增加交换大小。 See this link

【讨论】:

    猜你喜欢
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 2010-10-05
    • 2012-02-13
    • 2017-12-21
    • 2016-04-13
    相关资源
    最近更新 更多