如何在512M vps中运行“play”--它报告“无法为对象堆保留足够的空间”



我正在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上侦听的服务器。

演出舞台&amp;目标/启动-Xmx384m

最新更新