了解nodejs内存泄漏

时间:2016-03-09 21:56:30

标签: node.js memory-leaks

我目前正在使用nodejs项目,其中一个控制器看起来跟着

var express = require('express'),
    router = express.Router(),
    blah = require('blah'),
    Foo = require('../models/foo');


/* Get all foos */

router.get('/', function (req, res) {
    Foo
        .getAll()
        .then(function (foo) {

            return res.json({
                foo: blah(foo)
            });
        })
        .catch(function (err) {
            //handle error;
        });
});

/*
 *  Some other functions
 *
 */

在路由器端点内使用所需的模块blah和模型Foo。根据这篇文章http://www.ibm.com/developerworks/library/wa-memleak/,我假设它不会被垃圾收集器收集,因为它被它内部的一个闭包引用,可能会造成内存泄漏。

在这种情况下,释放内存的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

模块缓存在node.js中,因此它们不应泄漏。它们将被加载一次,然后在请求它们的任何后续时间返回最初加载的模块。因此,require()不应该产生泄漏。初始加载会占用一些内存,但后续加载不应占用更多内存。如果你调用模块构造函数或其他一些使用内存的模块方法,那么该方法就可以独立存在。

在您的特定代码中,模块blahFoo没有泄漏且不符合垃圾回收的条件,因为它们用于仍处于活动状态且仍可调用的路由处理程序中。它们被加载一次,然后在被调用时可供路由处理程序使用。这不是泄漏。这是理想的行为。

如果这不是您所要求的,那么请澄清您认为可能在上述代码中泄露的内容。

相关问题