2012-03-27 27 views
1

我在512M vps上运行play2。如何在512M vps中运行`play` - 它报告`无法为对象堆预留足够的空间?

它可以创建一个新的应用程序:

play new test 

但不能启动test项目:

cd test 
play 

它报告这样的错误:

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

经过一番研究, ,我发现play2会调用play-2.0/framework/build,并且build有以下s ettings:

我试图修改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 "[email protected]" 

我们可以看到,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. 

我该怎么办?

+0

实际上,play可以运行在512M vps。后来我发现了这个问题:我用的vps提供了假内存,它显示512M,实际上只有不到200M。 (vps是非托管和便宜的,没有交换,但我最好不要写它的名字)。如果您遇到同样的问题,请在vps – Freewind 2012-09-06 02:42:47

回答

2

我在本地构建和开发。然后运行“play dist”创建一个包含启动脚本的分发。我使用Fabric部署到我的512MB VPS,并且没有任何内存问题。

1

游戏台& &目标/启动-Xmx384m

5

假设你正在运行的Sun HotSpot虚拟机,这样运行:

_JAVA_OPTIONS="-Xmx384m" play <your commands> 

,你会得到你所需要的。当VM启动时,它将包含_JAVA_OPTIONS环境变量的内容以及您指定的任何其他命令行Java选项。你会知道它被拾起,因为你会在控制台看到以下消息:

Picked up _JAVA_OPTIONS: -Xmx384m

shell命令上面定义的变量只对shell命令的其余部分的执行。如果你想让它更耐用,你可以这样说

export _JAVA_OPTIONS="-Xmx384m" 

,并把在的.bash_profile或.profile等

的_JAVA_OPTIONS环境变量记录不完整,我不知道它有多广泛的支持,但我很确定它可以在Linux,BSD *(如Mac OS)上工作,并且......我不知道还有什么。

+1

上进行一些测试。您也可以使用'JAVA_OPTS',如'JAVA_OPTS =“ - Xms2m -Xmx16m”play start'。不同的是,'JAVA_OPTS'是Play特定的,并被添加或替换'_JAVA_OPTIONS'。它适用于2.1.4,可能不适用于早期版本。 – 2013-09-19 18:13:34

2

另一种方法是使用下面的命令(当你不使用游戏DIST但在服务器上藏汉安装框架奏效,也许它有独立包装的作品太多,但我没有测试过):

play "start 6000" -Xms64m -Xmx128m -server 

“启动6000”将开始我面临着同样的问题,但我找到了原因和解决方案的服务器侦听端口6000

4

这是一个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:在最大内存大小或更改最大永久大小。

相关问题