【问题标题】:Is this caused by insufficient memory?这是内存不足造成的吗?
【发布时间】:2021-06-06 22:06:19
【问题描述】:

这个问题是我用chipyard编译Boom的时候出现的。这是因为内存不足吗?我在 1 核 2G 云服务器上运行。

/bin/bash: 第 1 行:9986 杀死 java -Xmx8G -Xss8M -XX:MaxPermSize=256M -jar /home/cuiyujie/workspace/Boom/chipyard/generators/rocket-chip/sbt-launch.jar -Dsbt.sourcemode=true -Dsbt.workspace=/home/cuiyujie/workspace/Boom/chipyard/tools ";项目实用程序;运行主要实用程序.GenerateSimFiles -td /home/cuiyujie/workspace/Boom/chipyard/sims/verilator/generated-src/chipyard.TestHarness.LargeBoomConfig -sim验证器” /home/cuiyujie/workspace/Boom/chipyard/common.mk:86:目标配方 '/home/cuiyujie/workspace/Boom/chipyard/sims/verilator/generated-src/chipyard.TestHarness.LargeBoomConfig/sim_files.f' 失败的 make: *** [/home/cuiyujie/workspace/Boom/chipyard/sims/verilator/generated-src/chipyard.TestHarness.LargeBoomConfig/sim_files.f] 错误 137

当我把内存调到4G的时候,出现了这个。

完成详细说明。 OpenJDK 64 位服务器虚拟机警告:信息: os::commit_memory(0x00000006dc3b7000, 97148928, 0) 失败; error='无法分配内存' (errno=12)

Java 运行时环境的内存不足,无法继续。 本机内存分配 (mmap) 未能映射 97148928 字节以提交保留内存。 包含更多信息的错误报告文件保存为: /home/cuiyujie/workspace/Boom/chipyard/hs_err_pid2876.log /home/cuiyujie/workspace/Boom/chipyard/common.mk:97:目标配方 'generator_temp' 失败 make: *** [generator_temp] 错误 1

我应该调整到8G内存,还是通过什么命令增加进程可以使用的内存大小?

当我把内存调到16G的时候,出现了这个。

/bin/bash: 第 1 行:2642 杀死 java -Xmx8G -Xss8M -XX:MaxPermSize=256M -jar /home/cuiyujie/workspace/Boom/chipyard/generators/rocket-chip/sbt-launch.jar -Dsbt.sourcemode=true -Dsbt.workspace=/home/cuiyujie/workspace/Boom/chipyard/tools ";项目tapeout; runMain bartools.tapeout.transforms.GenerateTopAndHarness -o /home/cuiyujie/workspace/Boom/chipyard/sims/verilator/generated-src/chipyard.TestHarness.LargeBoomConfig/chipyard.TestHarness.LargeBoomConfig.top.v -tho /home/cuiyujie/workspace/Boom/chipyard/sims/verilator/generated-src/chipyard.TestHarness.LargeBoomConfig/chipyard.TestHarness.LargeBoomConfig.harness.v -i /home/cuiyujie/workspace/Boom/chipyard/sims/verilator/generated-src/chipyard.TestHarness.LargeBoomConfig/chipyard.TestHarness.LargeBoomConfig.fir --syn-top ChipTop --harness-top TestHarness -faf /home/cuiyujie/workspace/Boom/chipyard/sims/verilator/generated-src/chipyard.TestHarness.LargeBoomConfig/chipyard.TestHarness.LargeBoomConfig.anno.json -tsaof /home/cuiyujie/workspace/Boom/chipyard/sims/verilator/generated-src/chipyard.TestHarness.LargeBoomConfig/chipyard.TestHarness.LargeBoomConfig.top.anno.json -tdf /home/cuiyujie/workspace/Boom/chipyard/sims/verilator/generated-src/chipyard.TestHarness.LargeBoomConfig/firrtl_black_box_resource_files.top.f -tsf /home/cuiyujie/workspace/Boom/chipyard/sims/verilator/generated-src/chipyard.TestHarness.LargeBoomConfig/chipyard.TestHarness.LargeBoomConfig.top.fir -thaof /home/cuiyujie/workspace/Boom/chipyard/sims/verilator/generated-src/chipyard.TestHarness.LargeBoomConfig/chipyard.TestHarness.LargeBoomConfig.harness.anno.json -hdf /home/cuiyujie/workspace/Boom/chipyard/sims/verilator/generated-src/chipyard.TestHarness.LargeBoomConfig/firrtl_black_box_resource_files.harness.f -thf /home/cuiyujie/workspace/Boom/chipyard/sims/verilator/generated-src/chipyard.TestHarness.LargeBoomConfig/chipyard.TestHarness.LargeBoomConfig.harness.fir --infer-rw --repl-seq-mem -c:TestHarness:-o:/home/cuiyujie/workspace/Boom/chipyard/sims/verilator/generated-src/chipyard.TestHarness.LargeBoomConfig/chipyard.TestHarness.LargeBoomConfig .top.mems.conf -thconf /home/cuiyujie/workspace/Boom/chipyard/sims/verilator/generated-src/chipyard.TestHarness.LargeBoomConfig/chipyard.TestHarness.LargeBoomConfig.harness.mems.conf -td /home/cuiyujie/workspace/Boom/chipyard/sims/verilator/generated-src/chipyard.TestHarness.LargeBoomConfig -ll 错误”/home/cuiyujie/workspace/Boom/chipyard/common.mk:123: 目标 'firrtl_temp' 的配方失败 make: *** [firrtl_temp] 错误 137

【问题讨论】:

  • 原来的命令是make CONFIG=LargeBoomConfig。我是否更改为 CONFIG=LargeBoomConfig -Xmx6G -Xss3G?
  • 是的,或者在执行过程时通过命令行:java -Xms3G -Xmx6G yourprogam.java
  • 请注意,我的错误是写 -Xss 而应该是 -Xms (第一个用于堆,这里暂时不涉及)
  • -Xms3G -- 为 JVM 分配最少 3GB -Xmx6G -- 为 JVM 最多分配 6GB
  • make:无效选项 -- 'G'。发生这种情况。

标签: java linux memory-management out-of-memory


【解决方案1】:

简短回答:是的


Error 137 在您的主机内存不足时抛出。

“我在 1 核 2G 云服务器上运行”

当您尝试将 8GB 分配给 JVM 时,OOM-Killer 说 “不,不,f...没办法” ,并开始发送 SIGKILL; 此 Killer 是一个主动进程,当其内存级别过低时,它会通过杀死 资源滥用 进程来拯救系统。

在这种情况下,滥用进程(非常滥用,确实)是您的 java 程序,它试图分配超过 (*) 4 次主机中的最大可用内存。

Exit Codes With Special Meanings

                 [error code 137 --> kill -9] (SIGKILL)

您应该:

  • 将最大 ~1.2GB - 1.5GB 分配给您的进程。 (双手交叉)

  • 如果您的进程确实需要这么多内存,请将您的主机更改为更强大/更大的东西。

  • 检查您是否真的需要 8GB 来执行该进程。


还请注意,给定的参数容易出错:Xmx8G -Xss8M 表示堆的最大值为 8GB,最小值为 8M。这应该更接近,因为 Xmx8G - Xms4G

*因为可用内存也不会是 2GB,而是介于 1.6-1.8 GB 之间

【讨论】:

    猜你喜欢
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 2011-07-14
    • 2012-12-14
    • 2012-05-08
    相关资源
    最近更新 更多