2013-04-11 91 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

相關問題