好吧…我回到正题。我无法一生解决这个问题。
我收到以下错误:
FATAL ERROR: JS Allocation failed - process out of memory
我可以列举出数十种(是的,数十种)我试图找出这个问题根源的东西,但实际上这太过分了。所以这是关键点:
我的假设是 (由于第二点),泄漏可能不是原因。相反,似乎有一个非常大的SINGLE对象。
我真正需要的是某种方法来找出应用程序崩溃时内存的状态,或者可能是导致致命错误的堆栈跟踪。
根据我上面的假设,只有10分钟的堆转储是不够的(因为该对象不会驻留在内存中)。
我必须为TrevorNorris提供一个巨大的支持,以帮助其修改node.js本身,以便在发生此错误时它会自动生成堆转储。
最终,对我来说解决这个问题的方法变得更加平凡。我编写了一些简单的代码,将每个传入API请求的端点附加到日志文件。我等待收集约10个数据点(崩溃),然后比较崩溃前60秒运行的端点。我发现在9/10的情况下,只有一个端点在崩溃之前被命中。
从那里开始,只需要深入研究代码即可。我缩减了所有内容- 从mongoDB查询返回的数据更少,仅将对象中必要的数据传递回回调等。现在,我们的速度比平时长了6倍,而在任何服务器上都没有发生崩溃,这导致我 希望 现在解决。