【发布时间】:2019-02-10 15:43:46
【问题描述】:
我正在尝试学习 Scala,所以我在我的 Ubuntu 机器上安装了 openjdk-8-jdk,然后继续安装 sbt。
sudo apt-get install openjdk-8-jdk
echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823
sudo apt-get update
sudo apt-get install sbt
不幸的是,在安装 sbt 之后,当我输入 'sbt about' 进行检查时,它检索到以下错误:
~$ sbt about
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000d5550000, 715849728, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 715849728 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/antonio/hs_err_pid14103.log
谁能告诉我是什么问题? 我不是一个经验丰富的程序员,我在任何地方都没有找到这个问题,也许是因为它太基础了。
谢谢!
【问题讨论】:
-
您的系统有多少物理内存?您是否配置了任何交换?
cat /proc/meminfo可以提供此信息。看起来 sbt 正在尝试保留大约 700mb 的堆,而操作系统说它没有。 -
没有足够的内存让 Java 运行时环境继续。恕我直言,这是自我解释。
-
Scala 也可以使用 Maven 或 Gradle 构建,顺便说一句
-
不是官方评论,但我在 Scala 中认识的每个人都只在 Java 8 上进行测试。您的错误是内存不足。但是,尝试分配 700+ MB 的内存对于
sbt about来说很奇怪,除非您使用的是小型系统(AWS 上的 T2 micro?) -
我经常在 Centos 上使用 sbt 和 open-jdk-8 没有任何问题,所以我确信你的 open-jdk 与 sbt 完美结合。自从你第一次运行 sbt 以来,它会开始下载各种 jars(包括 sbt 和 scala 编译器)——这个过程确实需要一些内存。如果您的机器确实内存不足,那么 JVM 将使用一个小堆运行,这可能会导致此类故障。您可以使用
java -XX:+PrintFlagsFinal -version | grep HeapSize来确定JVM 可以使用多少内存,然后尝试增加它。看到这个线程:stackoverflow.com/questions/28272923