8

我有一些正在运行的代码,但是其中存在内存泄漏。

在 node.js 中跟踪内存泄漏的一些好的策略是什么?

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

如何跟踪代码中的泄漏?

谢谢

4

1 回答 1

17

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

Javascript 对象是在堆上分配的,因此您需要一个可以转储堆的工具。获取堆转储后,您可以检查它并查看存在多少给定对象(或函数)的实例。

例如,对于您的代码,您知道每当用户连接时您都会创建一个套接字。在连接三个用户时转储堆应该显示约 3 个套接字。在这些用户断开连接后转储堆应该显示 ~0 个套接字。


您实际上可以将 Chrome 堆转储分析器与 Node.js 堆转储一起使用。


仅供参考,函数将显示在该(closure)部分下的堆转储中。

您需要确保为函数命名(即使它们不需要名称),以便它们在堆转储中显示为有用的东西。

例如,像

function() { }

只会显示function()在堆转储中。然而:

function taggedFunction() { }

将显示function taggedFunction()在堆转储中。如果您创建 100 个 taggedFunction,那么您将在堆转储中看到 100 次 taggeFunction。基本上,命名你的函数可以让你弄清楚你是否继续创建和泄漏它们。

于 2013-03-30T21:23:49.603 回答