【问题标题】:Error R14 (Memory quota exceeded)错误 R14(超出内存配额)
【发布时间】:2023-03-28 16:09:01
【问题描述】:

我有一个 Clojure Web 应用程序,我在 Heroku 上以免费计划运行。该应用程序运行良好或多或少一个月,但在过去 3 天的日志中一直显示此错误并且该应用程序无法运行。

我无法在本地重现此错误,但一切正常。

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

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

【问题讨论】:

    标签: memory heroku clojure


    【解决方案1】:

    尝试通过运行将最大堆大小设置得更低

    $ heroku config:set JAVA_TOOL_OPTIONS="-Xmx256m"
    

    【讨论】:

    【解决方案2】:

    我找到了超出内存的罪魁祸首。 Heroku 在启动时运行的命令没有使用 jar 文件。我之前有的是web: lein ring server-headless,我把它改成在Procfile中执行jarweb: java -jar target/<app-name>-standalone.jar

    由于我使用的是ring,因此我还让 Heroku 在启动前运行 lein ring uberjar 而不是 lein uberjar:这就像在 Heroku 中将 LEIN_BUILD_TASK='ring uberjar' 设置为全局配置变量一样简单。

    【讨论】:

      【解决方案3】:

      正如错误消息所说,应用程序消耗的内存比 Heroku 为其分配的内存要多。 Heroku 允许您查看应用指标,其中的图表可能有助于确定原因。

      Heroku 对 JVM 应用程序中的内存相关问题有专门的指南java-memory-issues。您可能会发现它很有用。

      【讨论】:

        猜你喜欢
        • 2014-10-15
        • 2017-04-16
        • 1970-01-01
        • 2020-11-23
        • 2013-10-01
        • 2014-07-14
        • 2017-11-02
        • 1970-01-01
        • 2013-08-17
        相关资源
        最近更新 更多