执行提升项目时使用SBT的内存不足错误

时间:2012-01-06 00:34:44

标签: scala memory lift sbt

我使用的是SBT 0.7.7。当我对Lift项目进行更改并通过以下方式重新编译时:

  1. jetty-stop
  2. compile
  3. jetty-run
  4. 我收到以下错误:

      

    执行sbt时出错:java.lang.OutOfMemoryError:PermGen space

    我在/opt/local/bin/sbt-0.7中定义了以下内容:

    # Is the location of the SBT launcher JAR file.
    LAUNCHJAR="/opt/local/share/sbt-0.7/sbt-launch-0.7.7.jar"
    
    # Ensure enough heap space is created for SBT.
    if [ -z "$JAVA_OPTS" ]; then
    JAVA_OPTS="-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=256m -Xmx512M -Xss2M"
    fi
    
    # Assume java is already in the shell path.
    exec java $JAVA_OPTS -jar "$LAUNCHJAR" "$@"
    

2 个答案:

答案 0 :(得分:37)

PermGen只是众多空间中的一个,它们整体构成了堆。您可以增加整个堆,直到分配的部分足够大,或者您可以简单地增加PermGen空间的分配。为了做到这一点,请使用

对于sbt 0.12.0

  

导出SBT_OPTS = -XX:MaxPermSize = 256m

最好把它放在你的.bash_profile中(假设你使用的是bash)

对于sbt 0.7

在您的情况下,将-XX:MaxPermSize增加到256m以上。请记住,需要超过256米表明可能存在其他问题。

答案 1 :(得分:6)

您需要允许java分配更多内存。

# You may need more or less depending on your project.
export SBT_OPTS=-Xmx1024M

您也可以重新访问其他一些内存设置。我正在运行SBT 0.11.2,除了Xmx,我什么都没有。

顺便说一句,如果您在编译期间确实遇到任何GC问题,我会感到惊讶。更改GC收集策略与更长时间运行的流程更相关。