【问题标题】:What is destroying the process memory?是什么破坏了进程内存?
【发布时间】:2012-07-20 03:09:08
【问题描述】:
2012-07-20T03:04:50+00:00 heroku[web.1]: Process running mem=546M(106.8%)
2012-07-20T03:04:50+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-07-20T03:05:11+00:00 heroku[web.1]: Process running mem=583M(113.9%)
2012-07-20T03:05:11+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-07-20T03:05:30+00:00 heroku[web.1]: Process running mem=611M(119.4%)
2012-07-20T03:05:30+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-07-20T03:05:50+00:00 heroku[web.1]: Process running mem=611M(119.4%)
2012-07-20T03:05:50+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-07-20T03:06:10+00:00 heroku[web.1]: Process running mem=605M(118.3%)
2012-07-20T03:06:10+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-07-20T03:06:30+00:00 heroku[web.1]: Process running mem=689M(134.6%)
2012-07-20T03:06:30+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-07-20T03:06:37+00:00 heroku[router]: Error H12 (Request timeout) -> POST vivid-night-1834.herokuapp.com/ dyno=web.1 queue= wait= service=30000ms status=503 bytes=0
2012-07-20T03:06:51+00:00 heroku[web.1]: Process running mem=909M(177.7%)
2012-07-20T03:06:51+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2012-07-20T03:07:10+00:00 heroku[web.1]: Process running mem=909M(177.7%)

查看进程以多快的速度耗尽内存。我运行了heroku restart,但一秒钟后它仍在发生。

我有一个 node.js 应用程序,在过去的几天里我一直在毫无困难地工作。它进行了一些 mongodb 调用,一些 redis 调用,但 redis 和 mongo 中的数据总量可能低于 50kb。

如何追踪问题?

【问题讨论】:

    标签: node.js memory process heroku


    【解决方案1】:

    看看你在它工作时和现在之间所做的更改,也许?

    如果没有看到代码,很难说出问题可能是什么,除非你显然在做一些事情来一遍又一遍地分配内存,所以要么是循环,要么是递归函数调用适当的退出条件。

    【讨论】:

    • 是的,我确实在我在这里发布后立即回去尝试了。我把它缩小到一个错误的 for() 循环,但我不知道为什么它会在我的一生中无休止地运行,看起来就像任何其他循环一样。
    【解决方案2】:

    尽管这是您的循环,但超出内存配额是大多数开发人员在使用 heroku 时面临的常见问题。它与 Node 的垃圾收集器有关。我把我的答案放在这里是为了帮助那些可能一直在寻找相同问题的人。

    Node (V8) 使用惰性和贪婪的垃圾收集器。由于其默认限制约为 1.5 GB,它有时会等到绝对需要时才回收未使用的内存。如果您的内存使用量在增加,则可能不是泄漏——而是节点通常的惰性行为。 为了更好地控制应用的垃圾收集器,您可以在 Procfile 中为 V8 提供标志:

    如果您的应用在环境中运行,这一点尤其重要 可用内存少于 1.5 GB。例如,如果你想 要将节点定制为 512 MB 容器,请尝试:

    web: node --optimize_for_size --max_old_space_size=460 --gc_interval=100 server.js
    

    取自这里https://blog.heroku.com/node-habits-2016

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 2013-05-16
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多