playframework - IOException无法分配内存

时间:2012-03-19 20:13:22

标签: scala playframework-2.0 typesafe-stack

我的系统是Mint 12 64bit。

我已经安装了类型安全堆栈并创建了一个新的播放应用程序。没有修改代码我试图运行它。这是输出:

http://pastebin.com/6XwmsbAE

Play抱怨此错误消息:

IOException: Cannot run program "javac": java.io.IOException: error=12, Cannot allocate memory 

我该如何解决这个问题?

更新:

@Mef

好的,你绝对是对的。我已经将初始RAM从1 GB增加到2 GB(在虚拟机上运行)。编译工作一次。

不幸的是,java已经下定决心即使是2 GB也不够:运行eclipse和firefox我的系统使用1 GB。然后我开始sbt,内存使用量上升到大约1.2 GB。有人可能认为这就足够了。事实并非如此。虽然800 MB仍然可用,但编译失败并出现相同的错误。此外,在尝试编译应用程序后,内存使用量增加到1.6 GB。奇怪的是,即使在编译项目时,它也永远不会达到2 GB,但峰值大约为1.8 GB。

尽管如此,我还是再次尝试并为虚拟机提供了3演出的RAM。现在编译和运行应用程序工作正常。作为另一个可用3 GB的奇迹,内存使用量永远不会超过1.6 GB,并且远低于我在2 GB迭代中看到的1.8 GB的最大值。

3 个答案:

答案 0 :(得分:17)

实际上这并非完全是一个系统错误:调整播放配置文件将允许您在内存小于1GB的系统上运行。

play-2.0.4/framework/build(或build.bat)中,您只需更改

即可
java ${DEBUG_PARAM} -Xms512M -Xmx1536M ...

java ${DEBUG_PARAM} -Xms128M -Xmx512M ...

现在可能会有其他问题以较少的内存运行,但至少基本设置有效。

答案 1 :(得分:3)

由于这是一般javac错误,我怀疑它与Play有关。很可能你真的没有内存了。

答案 2 :(得分:1)

这在另一篇文章中有很好的描述,它似乎是OpenJDK的一个问题。

How to solve "java.io.IOException: error=12, Cannot allocate memory" calling Runtime#exec()?

尝试以下方法:

# echo 1 > /proc/sys/vm/overcommit_memory

这对我有用: - )