我正在运行一个带有Node.JS的Socket.IO服务器,它通常使用大约400 MB的内存,因为有很多数据被缓存以发送给客户端。然而,几个小时后,它突然开始在大约40分钟内增长到1.4 GB。有人告诉我使用heapdump来查找是否存在内存泄漏。
问题是heapdump只有317 MB,并且其中没有任何东西看起来与众不同,所以我坚持调试。我也用nodetime运行它,它表示V8堆的使用量大约为400 MB,但总的V8堆大小是1.4 GB。
如何找出剩余1 GB的来源?
答案 0 :(得分:0)
也许node-memwatch可以帮到你?
https://github.com/lloyd/node-memwatch
从其自述文件:
node-memwatch用于帮助您检测和查找内存泄漏 Node.JS代码。它提供:
当您的代码出现内存泄漏时发出的泄漏事件。
偶尔发布的统计信息事件,为您提供描述您的数据的数据 堆使用情况和趋势随着时间推移。
一个HeapDiff类,可让您比较堆之间的状态 两个时间点,告诉你已经分配了什么,以及有什么 已被释放。