【问题标题】:Why am I getting memory quota exceeded errors on Heroku even while unused? (play2/scala)为什么即使在未使用的情况下,我也会在 Heroku 上收到超出内存配额的错误? (play2/scala)
【发布时间】:2013-03-25 20:47:39
【问题描述】:

只是坐着没有请求,我的内存不断增加,最终超出了内存配额。有很多事情我不明白。

  1. 为什么没有请求时内存使用量不断增加?
  2. “Process running mem”的值从何而来(我知道这似乎不是堆和非堆使用中的任何数字组合的总和)。
  3. 为什么即使我有推荐的JAVA_OPTS: -Xmx384m -Xss512k -XX:+UseCompressedOops -javaagent:heroku-javaagent-1.2.jar=stdout=true,它也会超过?

这是一个日志文件的示例

app/web.1:  heroku-javaagent: JVM Memory Usage     (Heap): used: 275M committed: 349M max:349M 
app/web.1:  heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1:  heroku-javaagent: JVM Threads                : total: 37 daemon: 7 non-daemon: 21 internal: 9 
app/web.1:  heroku-javaagent: JVM Memory Usage     (Heap): used: 276M committed: 349M max:349M 
app/web.1:  heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1:  heroku-javaagent: JVM Threads                : total: 37 daemon: 7 non-daemon: 21 internal: 9 
app/web.1:  heroku-javaagent: JVM Memory Usage     (Heap): used: 277M committed: 349M max:349M 
app/web.1:  heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1:  heroku-javaagent: JVM Threads                : total: 37 daemon: 7 non-daemon: 21 internal: 9 
app/web.1:  heroku-javaagent: JVM Memory Usage     (Heap): used: 277M committed: 349M max:349M 
app/web.1:  heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1:  heroku-javaagent: JVM Threads                : total: 37 daemon: 7 non-daemon: 21 internal: 9 
app/web.1:  heroku-javaagent: JVM Memory Usage     (Heap): used: 278M committed: 349M max:349M 
app/web.1:  heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1:  heroku-javaagent: JVM Threads                : total: 37 daemon: 7 non-daemon: 21 internal: 9 
heroku/web.1:  Process running mem=517M(101.1%) 
heroku/web.1:  Error R14 (Memory quota exceeded) 
heroku/web.1:  Process running mem=517M(101.1%) 
heroku/web.1:  Error R14 (Memory quota exceeded) 
heroku/web.1:  Process running mem=517M(101.1%) 
heroku/web.1:  Error R14 (Memory quota exceeded) 
app/web.1:  heroku-javaagent: JVM Memory Usage     (Heap): used: 212M committed: 349M max:349M 
app/web.1:  heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1:  heroku-javaagent: JVM Threads                : total: 37 daemon: 7 non-daemon: 21 internal: 9 
heroku/web.1:  Process running mem=517M(101.1%) 
heroku/web.1:  Error R14 (Memory quota exceeded) 
heroku/web.1:  Process running mem=517M(101.1%) 
heroku/web.1:  Error R14 (Memory quota exceeded) 
heroku/web.1:  Process running mem=517M(101.1%) 
heroku/web.1:  Error R14 (Memory quota exceeded) 
app/web.1:  heroku-javaagent: JVM Memory Usage     (Heap): used: 213M committed: 349M max:349M 
app/web.1:  heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1:  heroku-javaagent: JVM Threads                : total: 37 daemon: 7 non-daemon: 21 internal: 9 
heroku/web.1:  Process running mem=517M(101.1%) 
heroku/web.1:  Error R14 (Memory quota exceeded) 
heroku/web.1:  Process running mem=517M(101.1%) 
heroku/web.1:  Error R14 (Memory quota exceeded) 
heroku/web.1:  Process running mem=517M(101.1%) 
heroku/web.1:  Error R14 (Memory quota exceeded) 
app/web.1:  heroku-javaagent: JVM Memory Usage     (Heap): used: 213M committed: 349M max:349M 
app/web.1:  heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1:  heroku-javaagent: JVM Threads                : total: 37 daemon: 7 non-daemon: 21 internal: 9 
heroku/web.1:  Process running mem=517M(101.1%) 
heroku/web.1:  Error R14 (Memory quota exceeded) 
heroku/web.1:  Process running mem=517M(101.1%) 
heroku/web.1:  Error R14 (Memory quota exceeded) 
heroku/web.1:  Process running mem=517M(101.1%) 
heroku/web.1:  Error R14 (Memory quota exceeded) 
app/web.1:  heroku-javaagent: JVM Memory Usage     (Heap): used: 214M committed: 349M max:349M 
app/web.1:  heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M 
app/web.1:  heroku-javaagent: JVM Threads                : total: 37 daemon: 7 non-daemon: 21 internal: 9 
heroku/web.1:  Process running mem=517M(101.1%) 
heroku/web.1:  Error R14 (Memory quota exceeded) 
heroku/web.1:  Process running mem=517M(101.1%) 
heroku/web.1:  Error R14 (Memory quota exceeded) 
heroku/web.1:  Process running mem=517M(101.1%) 
heroku/web.1:  Error R14 (Memory quota exceeded) 

【问题讨论】:

    标签: scala heroku playframework-2.0


    【解决方案1】:

    这个问题不应该是 Heroku 特有的,并且应该(理想情况下)能够在本地重现。首先,我建议以 Heroku 运行它的方式在本地运行您的应用程序:

    然后我会使用内存分析器(例如 VisualVM)附加到您在本地运行的应用以查看发生了什么。

    如果这不起作用,或者您想更好地了解 Heroku 上的内存使用情况,我建议启用 log-runtime-metrics。这也可以与Log2Viz 一起使用以获得实时的内存可视化。

    【讨论】:

      【解决方案2】:

      刚刚遇到了类似的问题。我无法在本地重现该问题。 事实证明,我们的日志配置中有一个文件附加程序。写入日志会使内存增长。 您可以通过编写一个记录大量日志的小应用程序来验证这一点。如果启用 log-runtime-metrics,您将看到 memory_cache 和 memory_total 增长。

      【讨论】:

      • 你能分享更多关于你的日志配置的细节吗? Heroku 有什么办法可以防止这种情况发生吗?
      【解决方案3】:

      在 heroku 中启用 log-runtime-metrics:

      $ heroku labs:enable log-runtime-metrics
      Enabling log-runtime-metrics for myapp... done
      $ heroku restart
      

      这将允许您在日志中查看内存使用情况

      heroku logs -t
      

      https://devcenter.heroku.com/articles/log-runtime-metrics

      【讨论】:

      • -1 这在六个月前的另一个答案中已经提到过,并且没有增加任何附加值。
      • 我错过了最后一句话。
      【解决方案4】:

      我在 grails 应用程序中有相同的错误消息,我阅读了这个 article 解决方案很简单,使用这个 java.runtime.version= 在根文件夹中创建一个 system.property 文件1.7 作为内容,然后我重新部署应用程序,错误 R14 它消失了

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-25
        • 2015-03-24
        • 1970-01-01
        • 2013-10-01
        • 2017-03-11
        • 1970-01-01
        • 2014-07-14
        • 1970-01-01
        相关资源
        最近更新 更多