我有一个Express.js网络应用程序因内存问题而不断破解:
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap
out of memory
当我启动服务时,内存使用量约为170Mb(由htop报告为RES内存)。然后我开始向它发出请求,内存开始上升。
我使用memwatch
尝试跟踪内存泄漏的问题,但memwatch.HeapDiff()
报告的内容如下:
{ before: { nodes: 2093729, size_bytes: 197165296, size: '188.03 mb' },
after: { nodes: 2491264, size_bytes: 232097040, size: '221.34 mb' },
...
...我明白该应用程序正在使用221.34mb的堆;但是对于htop
,内存使用量在中断时大约为2GB。
问题是,如果我的假设是正确的,那么仍然可以使用htop作为RES内存报告的非堆内存?
答案 0 :(得分:2)
我以前见过这个,其中使用的内存比htop看到的内存要小得多。
在我们的例子中,JavaScript中的内存泄漏看起来很小,但修复时解决了内存问题。
我写了一篇文章,详细说明了我为诊断它所采取的步骤,这里发布的时间太长了。
https://www.alexkras.com/simple-guide-to-finding-a-javascript-memory-leak-in-node-js/