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。
如何追踪问题?
答案 0 :(得分:2)
看看你在工作和现在之间所做的改变,也许吧?
在没有看到代码的情况下,很难说出问题可能是什么,除了你显然正在做一些事情来反复分配内存,所以这是一个循环或一个递归函数调用没有适当的退出条件。
答案 1 :(得分: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