2013-11-23 55 views
9

我有一个非常基础的游戏!应用程序,它只是简单地处理一些正常的GET和POST请求,并与MySQL数据库进行对话,没有什么奇怪的。在Amazon EC2微型实例中运行Play框架应用程序

我运行了play dist并将zip文件传输到了我的EC2实例。解压缩它,去bin文件夹,运行./myapp后,我得到一个消息:

Java HotSpot(TM) 64-Bit Server VM warning: Info: os::commit_memory ... error='Cannot allocate memory' (errorno=12) 
There is insufficient memory for the Java Runtime Environment to continue. 

我运行游戏版本2.2.1和这种情况下具有约RAM和512MB,与64位版本Oracle JDK。这是不足以运行一场比赛!应用程序还是我错过了什么?

谢谢。

+0

我也尝试使用运行它openjdk并得到了另一个类似的错误消息:“无法为对象堆预留足够的空间” – Henrique

+0

玩可以运行一个小堆 - 你试过一个示例应用程序创建通过播放新的没有变化? –

+0

您也可以查看bin脚本的选项并分配较小的内存量。 –

回答

3

使用播放2.2.1我不得不运行play dist来生成zip文件。然后我将它复制到aws实例。 到了那里,我提取的ZIP和改变可执行文件:从

local mem=${1:-1024} 

到:

local mem=${1:-512} 

这为我做。我从here得到了想法,但我不想只删除它们在那里的逻辑,所以我只是减少了默认值。

同时请注意,在AWS EC2微:

$ java -version 
java version "1.6.0_24" 
OpenJDK Runtime Environment (IcedTea6 1.11.14) (amazon-65.1.11.14.57.amzn1-x86_64) 
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode) 

所以,你必须奔跑play dist时使用相同的Java JDK。

编辑:

我更新Java来的OpenJDK 7,并能没有任何错误运行示例播放应用。

+0

这工作就像一个魅力,但有没有一种方法来自动化这个过程,所以不必每次更新都执行编辑? – somid3

+1

这效果更好 - $/path/to/bin/ -mem 512 -J-server – somid3

14

Play Framework 2.3现在有一个漂亮的小功能。

$ /path/to/bin/<project-name> -mem 512 -J-server 

Shoule完成工作。

http://www.playframework.com/documentation/2.3-SNAPSHOT/ProductionConfiguration


指定其他JVM参数 您可以指定任何JVM参数来启动脚本。否则将使用默认的JVM设置:

$/path/to/bin/-J-Xms128M -J -Xmx512m -J-server 为了方便起见,您还可以设置内存最小值,最大值,permgen和保留代码缓存大小一气呵成;一个公式来确定 给出的提供的参数(其表示最大存储器)这些值:

$ /路径/为/ bin/-mem 512 -J-服务器

+1

谢谢。在play2.3(activator) – JasonG

+1

上为我工作在数字海洋512服务器上注意:这也适用于激活器! ('激活清洁阶段 - mem 512') –