【问题标题】:JVM is not recognizing my available memory [duplicate]JVM 无法识别我的可用内存 [重复]
【发布时间】:2020-12-16 02:38:57
【问题描述】:

我有一个 4GB RAM 的 Ubuntu 服务器 (20.04)。启动一些应用程序后,它有 2.5GB 的可用 RAM。当我尝试使用 1GB(-Xms1g -Xmx1g) 的堆大小启动 java 应用程序时,它不会启动并记录以下错误

Java 运行时环境内存不足 继续。本机内存分配(mmap)映射失败 1073741824 用于提交保留内存的字节。

如果我尝试将堆大小降低到 512m 或更低,它将启动,但几分钟后,即使我有一半可用内存,服务也会停止并出现类似错误。 看起来 JVM 没有使用/识别所有可用内存。

感谢任何帮助。

【问题讨论】:

  • 不是this issue吗?显示sysctl vm.overcommit_memory vm.overcommit_ratiocat /proc/meminfo 的结果
  • 它正在工作!非常感谢@apangin
  • 好。那我把这个问题作为重复来结束。

标签: java jvm out-of-memory heap-memory ram


【解决方案1】:

您可能会受到this issue 的潜在影响;那里有 2 种可能的解决方法(每张票):

  1. 禁用压缩的 Oops (-XX:-UseCompressedOops) 会带来轻微的性能损失。这将指示 JVM 在没有 Compressed Oops 功能的情况下运行,并且不会尝试将 Java 堆放入前 4GB 堆中
  2. 保留 CompressedOops 并使用 JVM 选项 -XX:HeapBaseMinAddress=n 设置 Java 堆的基址,以指定 Java 堆的起始地址,将其设置为更高的地址,以便有足够的空间可用于原生 malloc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 2011-04-27
    相关资源
    最近更新 更多