Search code examples
startupsbtplayframework-2.0

How to run `play` in a 512M vps -- it reports `Could not reserve enough space for object heap`?


I'm running play2 on a 512M vps.

It can create a new app:

play new test

But can't start that test project:

cd test
play

It reports such an error:

[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]$

After some research, I found play2 will invoke play-2.0/framework/build, and build has following settings:

I tried to modify the play-2.0/play shell, from:

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 "$@"

We can see that the Xms is 512M, the vps hasn't enough memory for it.

So I change it to:

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

This time, the error message is changed:

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

What should I do?


Solution

  • I build and develop locally. I then run "play dist" to create a distribution which contains a start script. I deploy to my 512MB VPS using Fabric and do not have any memory issues.