【发布时间】:2013-03-21 08:27:01
【问题描述】:
【问题讨论】:
标签: javascript node.js memory-leaks
【问题讨论】:
标签: javascript node.js memory-leaks
您可以通过分析应用程序的内存使用情况来解决这个问题。
Javascript 对象是在堆上分配的,因此您需要一个可以转储堆的工具。获取堆转储后,您可以检查它并查看给定对象(或函数)的实例存在多少。
例如,对于您的代码,您知道每当用户连接时都会创建一个套接字。在连接三个用户时转储堆应该显示约 3 个套接字。在这些用户断开连接后转储堆应该显示 ~0 个套接字。
您实际上可以将 Chrome 堆转储分析器与 Node.js 堆转储一起使用。
有关 Chrome 堆转储分析器的文档:https://developers.google.com/chrome-developer-tools/docs/heap-profiling
允许您获取 Node.js 堆转储并在 chrome 中检查它们的项目:https://github.com/bnoordhuis/node-heapdump
仅供参考,函数将显示在(closure) 部分下的堆转储中。
您需要确保为函数命名(即使它们不需要名称),以便它们在堆转储中显示为有用的东西。
例如,类似
function() {
}
只会在堆转储中显示为function()。其中:
function taggedFunction() {
}
将在堆转储中显示为function taggedFunction()。如果您创建 100 个 taggedFunction,那么您将在堆转储中看到 100 次 taggeFunction。基本上,命名你的函数可以让你弄清楚你是否继续创建和泄漏它们。
【讨论】:
interval 变量在全局范围内,并且只设置了一次。我认为正在为每个连接创建一个间隔。