Scala应用程序超出了Heroku内存配额

时间:2013-04-11 09:47:48

标签: scala heroku casbah scalatra

我在Heroku上托管我的移动应用程序的后端。它是用Scala编写的,使用Scalatra来公开REST API。除此之外,我正在运行一个提取数据的工作者并将其推送到MongoHQ的数据库(使用casbah)。对于他们两个我一直得到 R14(超出内存配额)错误。在我的本地机器上,工作者消耗的内存不超过200 - 250 MB,根据New Relic监控,Scalatra应用程序在Heroku上仅使用250 MB。

这些是我的Heroku实例上的相关环境变量:

  

JAVA_OPTS:-Xmx384m -Xss512k -XX:+ UseCompressedOops -javaagent:newrelic / newrelic.jar

     

JAVA_TOOL_OPTIONS:-Djava.net.preferIPv4Stack = true

     

SBT_OPTS:-Xmx384m -Xss512k -XX:+ UseCompressedOops

     

REPO:/app/.sbt_home/.ivy2/cache

Web服务甚至还没有收到任何流量,为什么Heroku会抱怨内存消耗?

1 个答案:

答案 0 :(得分:3)

作为一项实验,尝试将Scalate从等式中取出。从理论上讲,如果没有使用Scalate模板运行(这种应用程序不需要),您应该能够运行Scalatra REST API并在JVM中使用大约64MB。

如果不稍微调整部署,很难确定。但是作为猜测,Scalate编译器现在默认捆绑到Scalatra的默认G8模板中,以便提供预编译的视图以提高生产速度,可能会让你超过Heroku的限制。

可能有一种方法可以让模板预编译在Heroku部署过程之外工作,但是我不熟悉Heroku部署或Scalate模板编译以了解它是如何工作的。如果使用WAR进行部署,模板将已经过预编译,并且您不会在第一时间受到启动惩罚。