2017-05-07 66 views
1

我有一个Clojure Web应用程序,我在Heroku的免费计划上运行。该应用程序一直运行良好或多或少一个月,但在过去的3天内,日志显示此错误,该应用程序无法正常工作。错误R14(超出内存配额)

Error from Heroku logs

我不能够在当地重现此错误,这里的一切开始了罚款。

我试着重新启动应用程序几次,部署一个新的实例,并摆弄JAVA_OPTS和JAVA_TOOL_OPTIONS,但没有任何帮助,我坚持相同的错误。

该应用程序的整个代码是here。有没有人遇到这个错误和可能的解决方法?

回答

1

我找到了突破内存的罪魁祸首设置你的最大堆大小小。 Heroku在启动时运行的命令未使用jar文件。我之前得到的是web: lein ring server-headless,我将它改为在Procfile中执行jar web: java -jar target/<app-name>-standalone.jar

由于我使用的ring,我也有启动的Heroku之前运行lein ring uberjar而不是lein uberjar:这是设置LEIN_BUILD_TASK='ring uberjar'在Heroku的全局设置变种一样简单。

1

正如错误消息所述,该应用消耗的内存比分配给它的Heroku更多。 Heroku允许您查看应用程序指标,从中找出可能对识别原因有用的图表。

Heroku在JVM应用程序java-memory-issues中有与内存相关的问题的特别指南。你可能会觉得它很有用。

0

尝试通过运行

$ heroku config:set JAVA_TOOL_OPTIONS="-Xmx256m" 
+0

这似乎没有帮助我的具体情况。尝试了一些像这些https://github.com/rogerallen/tweegeemee/blob/master/project.clj#L15-L20优化,但没有成功。 – feychou

+1

这可能意味着你有很多本机内存。阅读https://jkutner.github.io/2017/04/28/oh-the-places-your-java-memory-goes.html – codefinger

相关问题