我尝试在AWS上用 ec2 t2.micro 实例的计算机上运行用Scala编写的Play Framework应用程序中的sbt start
。但我不能因为没有足够的内存让Java Runtime Environment继续。
该机器具有1GB的内存,但实际上在运行剩余的OS进程时可以使用930MB的可用内存。它是Ubuntu Server 14.04 LTS。该应用程序很小,很可爱。
Java HotSpot(TM) 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:
# /app/incoming/hs_err_pid9709.log
Here is the link到日志文件以获取更多信息。
在内部,我看到jvm_args: -Xms1024m -Xmx1024m -XX:ReservedCodeCacheSize=128m ...
尽管我将JVM args以多种不同的方式设置为其他东西但没有效果。
使用这些参数-Xss1m -Xms256m -Xmx512m -XX:+CMSClassUnloadingEnabled
我尝试了一切:
sbt -J-Xss1m -J-Xms256m -J-Xmx512m -J-XX:+CMSClassUnloadingEnabled start
fork in run := true
build.sbt中的javaOptions in run += "-Xmx512m -XX:+CMSClassUnloadingEnabled"
他们都没有帮助。每次运行应用程序时,日志中都会显示相同的1024条内容。请帮忙。
答案 0 :(得分:10)
过去在Linux上为sbt
设置jvm内存参数也很困难(在Windows上你可以调整sbtconfig.txt
但是这个以及你可以指定的所有其他地方SBT_OPTS
我能找到由于某些原因,它不能在Linux上工作。)
上次我使用-mem <amount>
本身的sbt
选项解决了这个问题。
所以,在你的情况下,你应该尝试这样的事情:
$ sbt -mem 512 start
答案 1 :(得分:1)
我今天遇到了与EC2纳米实例相同的问题。解决这个问题:
cd /etc/sbt-launcher-packaging/
sudo nano sbtopts
然后取消注释-mem选项。我已将其设置为256,之后我可以在nano-instance上运行sbt。 编辑后的此配置文件的示例部分:
# Path to local Ivy repository (default: ~/.ivy2)
#
#-ivy ~/.ivy2
# set memory options
#
-mem 256
# Use local caches for projects, no sharing.
#
#-no-share