Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js JS进程使用1.4 GB内存,但heapdump只有300 MB_Node.js_V8 - Fatal编程技术网

Node.js JS进程使用1.4 GB内存,但heapdump只有300 MB

Node.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

我正在运行一个带有Node.JS的Socket.IO服务器,它通常使用大约400 MB的内存,因为缓存了大量数据以发送给客户端。然而,几小时后,它的使用量突然开始在大约40分钟内增长到1.4GB。有人告诉我使用heapdump来查找是否存在内存泄漏

问题是heapdump原来只有317MB,而且里面没有任何东西看起来不正常,所以我一直在调试。我还使用nodetime运行了它,它表示V8堆的使用量约为400mb,但V8堆的总大小为1.4gb


如何找出剩余的1GB从何而来?

也许node memwatch可以帮助您

自述:

node memwatch可帮助您检测和查找内存泄漏 JS代码。它规定:

泄漏事件,当代码出现内存泄漏时发出

一个stats事件,偶尔发出,为您提供描述 堆的使用情况和随时间变化的趋势

一个HeapDiff类,用于比较堆的状态 两个时间点,告诉你分配了什么,又分配了什么 他被释放了


如果v8堆的使用本身就是应该的,您确定这会对我有帮助吗?有趣的问题,我不知道,但是。。。您是否尝试过更改nodejs版本和/或验证是否存在任何问题?我在TCP套接字方面也遇到了同样的问题。您解决了吗?我对einaros websockets也有同样的问题。@DeaglinG No,我最后得到了一个cronjob,它每隔几个小时重新启动一次进程。不确定这是否有帮助,但我认为这与关闭websockets回调有关。您应该尝试在send命令的send/error回调中不使用任何较高分数的变量。