【发布时间】:2017-06-06 10:12:59
【问题描述】:
当我在 node.js 中运行以下代码时,我收到以下错误消息:
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
//Running this code causes program to run out of memory.
for(var i = 0; i < files.length; i++){
readFile(files[i]);
}
//log each line of file to console
function readFile(data){
var lines = fs.readFileSync(data).toString().split('\n');
for(var k = 0; k < lines.length; k++){
console.log(lines[k]);
}
}
但是,如果我更改 readFile 函数并将 console.log(lines[k]) 从 for 循环中取出,致命错误就会消失。这是为什么?以及如何修复原始代码以使其不再耗尽内存?
function readFile(data){
var lines = fs.readFileSync(data).toString().split('\n');
var string = ''
for(var k = 0; k < lines.length; k++){
//console.log(lines[k]);
string += lines[k];
}
console.log(string); //log the same string outside the loop and the fatal error goes away
}
【问题讨论】:
-
您的文件数组的长度是多少?在第一段代码中,您使用了两个 for 循环,这可能会同时刷新太多请求,从而导致内存不足
-
500 个文件。每个约1.8mb
-
您可以做的就是不要将所有文件一起刷新。你可以做的是使用 async.eachSeries 来控制刷新请求的循环。
-
谢谢,我会试试看是否有帮助。
标签: javascript node.js memory-leaks garbage-collection