Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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/javascript内存泄漏_Javascript_Node.js_Memory Leaks - Fatal编程技术网

检测代码中的node.js/javascript内存泄漏

检测代码中的node.js/javascript内存泄漏,javascript,node.js,memory-leaks,Javascript,Node.js,Memory Leaks,我知道这是工作,但它有一个内存泄漏 在node.js中有哪些好的策略可以跟踪内存泄漏 查找此类泄漏时,我应遵循哪些步骤 如何跟踪代码中的漏洞 谢谢您可以通过分析应用程序的内存使用情况来解决这个问题 Javascript对象是在堆上分配的,因此您需要一个可以转储堆的工具。获取堆转储后,您可以检查它并查看给定对象(或函数)存在多少实例 例如,对于您的代码,您知道您在用户连接时创建了一个套接字。在连接三个用户时转储堆应显示~3个套接字。在这些用户断开连接后转储堆应显示~0个套接字 实际上,您可以将C

我知道这是工作,但它有一个内存泄漏

在node.js中有哪些好的策略可以跟踪内存泄漏

查找此类泄漏时,我应遵循哪些步骤

如何跟踪代码中的漏洞


谢谢

您可以通过分析应用程序的内存使用情况来解决这个问题

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,不再有内存泄漏。