检测代码中的node.js/javascript内存泄漏
我知道这是工作,但它有一个内存泄漏 在node.js中有哪些好的策略可以跟踪内存泄漏 查找此类泄漏时,我应遵循哪些步骤 如何跟踪代码中的漏洞检测代码中的node.js/javascript内存泄漏,javascript,node.js,memory-leaks,Javascript,Node.js,Memory Leaks,我知道这是工作,但它有一个内存泄漏 在node.js中有哪些好的策略可以跟踪内存泄漏 查找此类泄漏时,我应遵循哪些步骤 如何跟踪代码中的漏洞 谢谢您可以通过分析应用程序的内存使用情况来解决这个问题 Javascript对象是在堆上分配的,因此您需要一个可以转储堆的工具。获取堆转储后,您可以检查它并查看给定对象(或函数)存在多少实例 例如,对于您的代码,您知道您在用户连接时创建了一个套接字。在连接三个用户时转储堆应显示~3个套接字。在这些用户断开连接后转储堆应显示~0个套接字 实际上,您可以将C
谢谢您可以通过分析应用程序的内存使用情况来解决这个问题 Javascript对象是在堆上分配的,因此您需要一个可以转储堆的工具。获取堆转储后,您可以检查它并查看给定对象(或函数)存在多少实例 例如,对于您的代码,您知道您在用户连接时创建了一个套接字。在连接三个用户时转储堆应显示~3个套接字。在这些用户断开连接后转储堆应显示~0个套接字
实际上,您可以将Chrome堆转储分析器与Node.js堆转储一起使用
- Chrome堆转储分析器的文档:
- 允许您获取Node.js堆转储并在chrome中检查它们的项目:
仅供参考,函数将显示在堆转储的
(closure)
部分下
您需要确保命名函数(即使它们不需要名称),以便它们在堆转储中显示为有用的内容
比如说
函数(){
}
将在堆转储中显示为function()
。其中:
函数taggedFunction(){
}
将在堆转储中显示为
function taggedFunction()
。如果创建100个taggedFunction,那么将在堆转储中看到100次taggeFunction。基本上,命名函数可以让你知道你是否一直在创建和泄漏它们。+1要获得一个很好的答案,并对OP的代码提出建设性的批评,setInterval应该对每个连接都是通用的。它用于为每个用户显示相同的时间。也许还有别的办法?啊。是的,你说的对,间隔时间其实很好。我没有看到interval
变量在全局范围内,并且只设置了一次。我以为为每个连接创建了一个间隔。我的脚本占用1.5GB内存,连接了100个客户端。我从socket.io切换到socks.js,不再有内存泄漏。