Ошибка памяти при использовании SBT при выполнении проекта лифта

Я использую SBT 0.7.7. Когда я вношу изменения в мой проект Lift и перекомпилирую с помощью:

  • jetty-stop
  • compile
  • jetty-run

Я получаю следующую ошибку:

Ошибка при выполнении sbt: java.lang.OutOfMemoryError: пространство PermGen

У меня есть следующее определение внутри /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" "[email protected]"

Ответы

Ответ 1

PermGen - это просто одно из многих пространств, которые в целом составляют кучу. Вы можете увеличить всю кучу до тех пор, пока выделенная часть не будет достаточно большой для ваших нужд, или вы можете просто увеличить выделение в пространстве PermGen. Чтобы сделать это, используйте

Для sbt 0.12.0

export SBT_OPTS = -XX: MaxPermSize = 256m

Лучше всего поместить это в ваш .bash_profile (если вы используете bash)

Для sbt 0.7

В вашем случае увеличьте -XX: MaxPermSize до более чем 256 м. Помня о том, что потребность в более чем 256 м предполагает, что могут быть и другие проблемы.

Ответ 2

Вам нужно разрешить java выделять больше памяти.

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

Вы также можете вернуться к некоторым другим параметрам памяти. Я запускаю SBT 0.11.2, и я не имею ничего, кроме Xmx.

В стороне, я был бы удивлен, если у вас есть какие-либо проблемы с GC во время компиляции. Изменение стратегии сбора GC более актуально для более длительных процессов.