【发布时间】:2020-06-25 01:43:56
【问题描述】:
我的 Node.js 代码存在内存泄漏问题。我正在尝试流式读取具有 100k 行的 CSV(链接中的示例文件)文件并处理文件中的每个条目。该过程在一段时间后出现内存分配错误。
“致命错误:接近堆限制的无效标记压缩分配失败 - JavaScript 堆内存不足”
我的代码示例
const fs = require('fs');
const config = require('../config/config');
const csv = require('csv-parser');
const tls = require('../services/tls');
processCSV('crawler', 'sample-csv.csv');
包含 100k 条目的流式处理 csv 文件
async function processCSV (jobName, fileName) {
return new Promise((resolve, reject) => {
let filePath = config.api.basePath + fileName;
fs.createReadStream(filePath)
.on('error', () => {
// handle error
console.log('error processing csv');
reject();
})
.pipe(csv())
.on('data', (row) => {
createJob(jobName, row);
})
.on('end', () => {
// handle end of CSV
console.log('Finished processing csv');
resolve(filePath);
})
});
}
验证 csv 文件中的每个 url
async function createJob (name, data) {
let {hostname, port, ip} = data;
let protocol = 'https';
if (port === 80) {
protocol = 'http';
}
let url = protocol + '://' + hostname;
try {
await tls.getHostData(url); // call an external api to get details of hostname
return url;
} catch (error) {
return error;
}
}
我不知道哪个函数导致了内存泄漏。
【问题讨论】:
-
世界其他地区不使用“lakh”和“crore”等印度词。请不要在这里使用它们。
标签: node.js csv memory-leaks stream