我有一些正在运行的代码,但是其中存在内存泄漏。
在 node.js 中跟踪内存泄漏的一些好的策略是什么?
查找此类泄漏时应遵循哪些步骤?
如何跟踪代码中的泄漏?
谢谢
您可以通过分析应用程序的内存使用情况来解决这个问题。
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。基本上,命名你的函数可以让你弄清楚你是否继续创建和泄漏它们。