Ошибка памяти при использовании 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 более актуально для более длительных процессов.