什么是破坏进程内存?

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重新启动,它仍然在一秒钟后发生。

我有一个node.js应用程序,我一直在努力没有任何困难,真的在过去几天。 它做了一些mongodb调用,一些redis调用,但redis和mongo中的数据总量可能不到50kb。

我如何跟踪这个问题?

看看你在工作和现在之间所做的改变吧?

在没有看到代码的情况下,很难说出什么问题,除非你显然正在做一些反复分配内存的事情,所以这是一个循环,或者是一个没有正确退出的recursion函数调用条件。

即使这是你的循环,但超过内存配额是开发人员与heroku面对的最常见的问题。 它与Node的垃圾收集器有关。 我在这里把我的答案,以帮助那些可能一直在寻找同样的问题的人。

节点(V8)使用懒惰和贪婪的垃圾收集器。 由于它的默认限制大约是1.5GB,它有时会一直等到完全恢复未使用的内存之前。 如果你的内存使用量在增加,那么可能不是泄漏,而是节点通常的懒惰行为。 为了更好地控制应用程序的垃圾收集器,可以在Procfile为V8提供标志:

如果您的应用程序在less于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