节点脚本中的内存泄漏是为了删除目录中的文件?

时间:2015-09-02 15:21:33

标签: javascript node.js memory-leaks

我使用以下代码删除目录子目录中超过15天未访问过的文件。代码可以工作,但是进程使用的内存增加到2gb以上,之后不会释放。所以显然存在内存泄漏,但对于我的生活,我不知道是什么。我该怎么做这个不同的方式?

readDirectories();

function readDirectories() {
    fs.readdir( dirPath, function( err, subDirs ) {
        if ( err ) return console.log( err );
        subDirs.forEach(function( subDir ) {
            var subDirPath = dirPath + subDir + "/";
            fs.stat( subDirPath, function( err, stat ) {
                if ( err ) return console.log( err );
                if ( stat && stat.isDirectory() ) readFiles( subDirPath );
            });
        });
    });
}

function readFiles( directory ) {
    fs.readdir( directory, function( err, files ) {
        if ( err ) return console.log( err );
        files.forEach(function( file ) {
            checkFile( directory + file );
        });
    });
}

function checkFile( path ) {
    fs.stat( path, function( err, stat ) {
        if ( err ) return console.log( err );
        if ( stat && stat.isFile() ) {
            var livesUntil = new Date();
            livesUntil.setDate( livesUntil.getDate() - 15 );
            if ( stat.atime < livesUntil ) {
                fs.unlink( path, function( err ) {
                    if ( err ) return console.log( err );
                });
            }
        }
    });
}

0 个答案:

没有答案