Ошибка нехватки памяти при использовании SBT при выполнении проекта лифта - PullRequest
16 голосов
/ 06 января 2012

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

  1. jetty-stop
  2. compile
  3. 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" "$@"

Ответы [ 2 ]

37 голосов
/ 19 сентября 2012

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

Для SBT 0,12,0

export SBT_OPTS = -XX: MaxPermSize = 256 м

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

Для SBT 0,7

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

6 голосов
/ 14 июля 2012

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

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

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

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

...