有哪些有效策略可以跟踪node.js进程中的本机内存泄漏?

我一直试图在node.js应用程序中追踪一个非常缓慢但持久的本机内存泄漏,而且我已经没有策略了.

该进程似乎是一个级别堆,但随着时间和日期的推移,node.js进程的RSS会慢慢增长.该过程是一个作业处理程序,它为不同的参数一遍又一遍地运行相同类型的作业.该过程的RSS增长与绘制累计工作数量的线的形状相同,因此每个作业运行都会以某种方式泄漏一些内存.

由于堆大致或多或少不变,标准堆检查工具似乎没有多大帮助.

以下是内存消耗情况的示例:

目前在节点0.8.7上运行.每个作业都执行大量数据库读/写操作,与redis实例通信,并使用mikael / request执行一些Web请求.

最佳答案 你有没有更新到最新版本?

我知道每个人都说:),我觉得我应该加入我的生产服务器上每两周更新我的node.js版本的乐队旅行车,因为我认为我有问题.听起来像个好主意不是吗?

所以我一直想知道同样的事情,我有几个node.js项目,我已经管理了几个月了(也是我去年写的).似乎V8引擎或我的节点应用程序只是非常缓慢地占用内存并且永远不会释放它. (它足够慢,我不得不每隔一段时间重新启动它们)

这是非常紧张的,特别是考虑到它应该释放RSS内存,或最终达到峰值.

如果你有兴趣跟踪在运行时内泄漏的对象(我的意思是javascript对象,函数等),mozilla有一个关于追踪内存泄漏的complete blog post和一些可用于执行此操作的项目的链接.

出于某种原因,他们在名单上没有这个. (看起来很简单,我现在正在我自己的项目中试一试,看它是否有效,我倾向于不能正确编译任何基于V8的项目)

heapdumphere is a link to a how to guide.

根据我自己的经验,V8引擎似乎分配内存,并保持它只是因为它需要以后完全相同的内存块.我的兄弟已经大量使用Node.js大约3年了,也看到了同样的事情.

同样只是为了完整性(我知道你已经拥有),如果有人想验证你是不是在V8内部泄漏内存,来自joyent的工程师有一个相当不错的how to track V8 memory leaks down写作.

点赞