Node.js堆内存转储,为什么字符串内存太高?

11
我在代码中遇到了一些内存泄漏的问题。于是我使用了 heapdump nodemodule 去捕获内存快照。通过使用 heapdump,我已经解决了一些问题,但为什么字符串缓冲区的大小仍然很大并且在不断增加呢?
我已经附上了组件的内存 heapdump 的屏幕截图,但由于文件大小为 139MB,所以无法附加在这里。我不知道你们需要什么其他信息来帮助解决这个问题...

屏幕截图中的字符串是包含您require()所有文件的函数。由于它们是匿名的,每个所需的模块都有自己的函数。然而,我想知道为什么它们不被释放。您使用的是哪个Node.js版本?您是使用本地JS还是一些编译到JS语言(CoffeeScript、TypeScript等)? - Robert Rossmann
1
你在循环中使用require()了吗? - TomG
@TomG 不,我没有做任何像那样的事情... - balaphp
内存泄漏的解决方法是在函数结束时将所有对象和数组置空。使用process.memoryUsage()并检查heapUsed值。如果该值没有减少,则存在问题。不要考虑RSS值。 - balaphp
另外,了解您使用的Node.js版本可能会有所帮助...您是否也考虑了node-inspector? - doktoroblivion
显示剩余3条评论
1个回答

1

memwatch 模块可能有助于提供更多的见解。它将允许您订阅 leak 事件。

memwatch.on('leak', function(info) { 
console.error('Memory leak detected: ', info); 
});

请阅读这篇教程,它很好地解释了如何检测Node中内存泄漏的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接