Node.js JS进程使用1.4 GB内存,但heapdump只有300 MB
我正在运行一个带有Node.JS的Socket.IO服务器,它通常使用大约400 MB的内存,因为缓存了大量数据以发送给客户端。然而,几小时后,它的使用量突然开始在大约40分钟内增长到1.4GB。有人告诉我使用heapdump来查找是否存在内存泄漏 问题是heapdump原来只有317MB,而且里面没有任何东西看起来不正常,所以我一直在调试。我还使用nodetime运行了它,它表示V8堆的使用量约为400mb,但V8堆的总大小为1.4gbNode.js JS进程使用1.4 GB内存,但heapdump只有300 MB,node.js,v8,Node.js,V8,我正在运行一个带有Node.JS的Socket.IO服务器,它通常使用大约400 MB的内存,因为缓存了大量数据以发送给客户端。然而,几小时后,它的使用量突然开始在大约40分钟内增长到1.4GB。有人告诉我使用heapdump来查找是否存在内存泄漏 问题是heapdump原来只有317MB,而且里面没有任何东西看起来不正常,所以我一直在调试。我还使用nodetime运行了它,它表示V8堆的使用量约为400mb,但V8堆的总大小为1.4gb 如何找出剩余的1GB从何而来?也许node memwat
如何找出剩余的1GB从何而来?也许node memwatch可以帮助您 自述: node memwatch可帮助您检测和查找内存泄漏 JS代码。它规定: 泄漏事件,当代码出现内存泄漏时发出 一个stats事件,偶尔发出,为您提供描述 堆的使用情况和随时间变化的趋势 一个HeapDiff类,用于比较堆的状态 两个时间点,告诉你分配了什么,又分配了什么 他被释放了
如果v8堆的使用本身就是应该的,您确定这会对我有帮助吗?有趣的问题,我不知道,但是。。。您是否尝试过更改nodejs版本和/或验证是否存在任何问题?我在TCP套接字方面也遇到了同样的问题。您解决了吗?我对einaros websockets也有同样的问题。@DeaglinG No,我最后得到了一个cronjob,它每隔几个小时重新启动一次进程。不确定这是否有帮助,但我认为这与关闭websockets回调有关。您应该尝试在send命令的send/error回调中不使用任何较高分数的变量。