Как запустить `play` на 512M vps - он сообщает" Не удалось зарезервировать достаточно места для кучи объектов "? - PullRequest
1 голос
/ 27 марта 2012

Я запускаю play2 на 512M vps.

Может создать новое приложение:

play new test

Но не могу запустить этот test проект:

cd test
play

Сообщает о такой ошибке:

[freewind@289144 test]$ play
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
[freewind@289144 test]$

После некоторых исследований я обнаружил, что play2 будет вызывать play-2.0/framework/build, а build имеет следующие настройки:

Я пытался изменить оболочку play-2.0/play, начиная с:

java ${DEBUG_PARAM} -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled 
     -XX:MaxPermSize=384M -Dfile.encoding=UTF8 -Dplay.version="${PLAY_VERSION}" 
     -Dsbt.ivy.home=`dirname $0`/../repository -Dplay.home=`dirname $0` 
     -Dsbt.boot.properties=`dirname $0`/sbt/sbt.boot.properties 
     -jar `dirname $0`/sbt/sbt-launch.jar "$@"

Мы можем видеть, что Xms равен 512M, vps недостаточно памяти для него.

Поэтому я изменил его на:

java ${DEBUG_PARAM} -Xms112M -Xmx300M -Xss1M 
     -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=84M -Dfile.encoding=UTF8
     ...

На этот раз сообщение об ошибке изменяется:

Error occurred during initialization of VM
Cannot create VM thread. Out of system resources.

Что мне делать?

Ответы [ 5 ]

5 голосов
/ 28 марта 2012

Предполагая, что вы используете виртуальную машину Sun Hotspot, запустите ее так:

_JAVA_OPTIONS="-Xmx384m" play <your commands>

И вы получите то, что вам нужно.Когда виртуальная машина запускается, она включает содержимое переменной среды _JAVA_OPTIONS вместе с любыми другими параметрами Java командной строки, которые вы укажете.Вы узнаете, что он был выбран, потому что вы увидите следующее сообщение на своей консоли:

Picked _JAVA_OPTIONS: -Xmx384m

Команда оболочки выше определяетпеременная только для выполнения остальной части команды оболочки.Если вы хотите сделать его более долговечным, вы можете сказать что-то вроде

export _JAVA_OPTIONS="-Xmx384m"

и поместить это в .bash_profile, или .profile и т. Д.

Переменная среды _JAVA_OPTIONS плохо документирована,и я не уверен, насколько широко он поддерживается, но я почти уверен, что он работает в Linux, BSD * (например, Mac OS) и ... я не знаю, что еще.

4 голосов
/ 05 сентября 2012

Я столкнулся с той же проблемой, но нашел причину и решение.

Это параметр Java в игре. Я делаю простую проверку:

java -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M -version 

Это не работает, но

java -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled

работает! и

java -Xms512M -Xmx512M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M

тоже работает.

Вы должны изменить build.bat как я: на максимальном размере памяти или изменить максимальный постоянный размер.

2 голосов
/ 28 марта 2012

Другой способ - использовать следующую команду (она работает, когда вы не используете play dist, но на сервере также установлена ​​интегрированная среда, возможно, она работает и с автономным пакетом, но я ее не тестировал):

play "start 6000" -Xms64m -Xmx128m -server

«start 6000» запустит сервер, прослушивающий порт 6000.

2 голосов
/ 27 марта 2012

Я строю и развиваюсь локально.Затем я запускаю «play dist», чтобы создать дистрибутив, содержащий стартовый скрипт.Я развернул на VPS 512 МБ, используя Fabric , и у меня нет проблем с памятью.

1 голос
/ 28 марта 2012

игровая сцена && target / start -Xmx384m

...