我正在512M vps上运行play2。
它可以创建一个新的应用程序:
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.
我该怎么办?
假设您正在运行Sun Hotspot虚拟机,请按以下方式运行:
_JAVA_OPTIONS="-Xmx384m" play <your commands>
你会得到你需要的。当VM启动时,它包括_JAVA_OPTIONS环境变量的内容以及您指定的任何其他命令行JAVA选项。你会知道它被拿走了,因为你会在控制台上看到以下消息:
拾取_JAVA_OPTIONS:-Xmx384m
上面的shell命令定义的变量仅用于执行shell命令的其余部分。如果你想让它更耐用,你可以说
export _JAVA_OPTIONS="-Xmx384m"
并将其放入.bash_profile或.profile等中
_JAVA_OPTIONS环境变量的文档很差,我不确定它的支持范围有多广,但我很确定它在Linux、BSD*(像Mac OS)和。。。我不知道还有什么。
我遇到了同样的问题,但我找到了原因和解决方案。
它是一个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
:关于最大内存大小或更改最大永久大小。
我在本地构建和开发。然后,我运行"play-dist"来创建一个包含启动脚本的分发版。我使用Fabric部署到512MB VPS,并且没有任何内存问题。
另一种方法是使用以下命令(当你不使用play-dist,但在服务器上也安装了框架时,它会起作用,也许它也适用于独立包,但我还没有测试它):
play "start 6000" -Xms64m -Xmx128m -server
"启动6000"将启动在端口6000上侦听的服务器。
演出舞台&;目标/启动-Xmx384m