当前位置: 首页 > 知识库问答 >
问题:

JVM内存不足崩溃

姚善
2023-03-14

我一直在使用G1垃圾收集器经历Java VM崩溃。我们得到使用以下签名生成的hs_err_pid.log文件:

#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 32744 bytes for ChunkPool::allocate
# Possible reasons:
#   The system is out of physical RAM or swap space
#   In 32 bit mode, the process size limit was hit
# Possible solutions:
#   Reduce memory load on the system
#   Increase physical memory or swap space
#   Check if swap backing store is full
#   Use 64 bit Java on a 64 bit OS
#   Decrease Java heap size (-Xmx/-Xms)
#   Decrease number of Java threads
#   Decrease Java thread stack sizes (-Xss)
#   Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
Native memory allocation (malloc) failed to allocate 32744 bytes for ChunkPool::allocate

Heap:
 garbage-first heap   total 4194304K, used 3140260K [0x00000006c0000000, 0x00000006c0108000, 0x00000007c0000000)
  region size 1024K, 1526 young (1562624K), 26 survivors (26624K)
 Metaspace       used 78244K, capacity 95308K, committed 96328K, reserved 1122304K
  class space    used 11319K, capacity 22311K, committed 23112K, reserved 1048576K

Memory: 4k page, physical 12269248k(1790928k free), swap 37973052k(362096k free)

共有1个答案

杨利
2023-03-14

将-xms和-xmx设置为相同的值对我们有帮助吗

这是个好主意。在最坏的情况下,它将在JVM启动后立即崩溃,这意味着Xmx大于系统中的可用内存。您还应该监视主机内存和交换使用情况,而不仅仅是JVM在运行时报告的内容。*memory。还要检查操作系统是否在某种程度上限制了应用程序可用的内存,比如Linux中的overcommit内核设置。

 类似资料:
  • 问题基于Oracle Hotspot JDK8。 我想,当应用程序遇到异常时,可能有两个原因。 分配的JVM堆大小达到指定大小,GC系统无法挤出足够的空间。 分配的JVM堆没有到达,但是没有足够的物理内存使JVM堆增长。假设<. 我用@Eugene在Answer中提供的代码做了一些实验。正如@Holger所指出的,结果在不同的环境中有所不同。我使用Hotspot JDK8 x64在CentOS x

  • 我正在努力解决古老的字谜问题。多亏了许多教程,我能够迭代一组字符串,递归地找到所有的排列,然后将它们与英语单词列表进行比较。我发现的问题是,在大约三个单词之后(通常是关于“变形”之类的东西),我会得到一个OutOfMemory错误。我试着把我的批分成小的集合,因为它似乎是消耗我所有内存的递归部分。但即使只是“变形”也把它锁起来了... 编辑:根据出色的反馈,我已经将生成器从排列更改为工作查找: 它

  • 对此有什么建议吗?

  • 我有一个Vue应用程序。当为该应用程序运行时,它失败了,错误为“致命错误:CALL_AND_RETRY_LAST Allocation failed-JavaScript heap out of memory” 不显示任何错误 我已经尝试使用--max_old_space_size,但它不起作用。

  • 问题内容: 我正在研究真正了解JVM中内存分配的工作方式。我正在编写一个内存不足的应用程序:堆空间异常。 我知道我可以传入VM参数(例如Xms和Xmx)来增加JVM为正在运行的进程分配的堆空间。这是解决此问题的一种可能的解决方案,或者我可以检查代码是否存在内存泄漏并在那里解决问题。 我的问题是: 1)JVM如何实际为其分配内存?这与OS如何将可用内存传递给JVM有什么关系?或更一般而言,任何进程的

  • 我想真正了解内存分配在JVM中是如何工作的。我正在编写一个内存不足的应用程序:堆空间异常。 我知道我可以传入VM参数,如Xms和Xmx,以增加JVM为正在运行的进程分配的堆空间。这是一个可能的解决方案,或者我可以检查我的代码内存泄漏并修复那里的问题。 我的问题是: 1)JVM实际上如何为自己分配内存?这与OS如何将可用内存传递给JVM有什么关系?或者更一般地说,为任何进程分配内存实际上是如何工作的