2013-04-11 94 views
3

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

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

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

JAVA_TOOL_OPTIONS:-Djava.net .preferIPv4Stack =真

SBT_OPTS:-Xmx384m -Xss512k -XX:+ UseCompressedOops

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

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

Marco

+0

你是否在使用scalate? – 2013-04-11 11:15:35

回答

3

作为一个实验,试着将Scalate排除在等式之外。从理论上讲,如果你没有使用Scalate模板(你不需要这种应用程序),你应该可以运行一个Scalatra REST API并在JVM中使用大约64MB。

很难确切地知道,而不会在您的部署中稍微戳一下。但作为一个猜测,现在Scalate编译器现在默认捆绑到Scalatra默认的G8模板中,以提供预编译的视图,以提高生产速度,这可能会让你超越Heroku的极限。

可能有一种方法可以让模板预编译工作在Heroku部署过程之外,但我对Heroku部署或Scalate模板编译不够熟悉,不知道如何工作。如果您使用WAR进行部署,则模板已经预编译,您不会首次受到启动惩罚。

+0

的确,我正在使用Scalate!我删除了它,内存占用大约200MB,用于工作人员和网络测试仪。不幸的是,他们仍然使用大约350MB的内存:https://gist.github.com/mlamina/5363755 – 2013-04-11 14:20:58

+0

在本地运行web应用程序,它只需要大约80MB的内存 – 2013-04-11 14:21:31

+0

Allthough在Heroku上托管了一个纯Web应用程序,我的设置非常相似。我正在使用Scalate进行模板化,并尝试了New Relic。在本地测试设置(通过使用与Heroku相同的参数使用target/start)我发现New Relic代理负责大部分内存开销。 – jan 2013-08-14 10:25:01

相关问题