javascript-nodejs用尽了内存来处理csv文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-nodejs用尽了内存来处理csv文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2140字,纯文字阅读大概需要4分钟。
内容图文
我已经阅读了许多有关nodejs内存不足的SO问题,但是我还没有发现任何听起来与我的情况类似的东西.
我正在尝试在250个csv文件中处理大约20GB的数据(因此?80MBs /文件).使用节点v5.9.1在具有90GB可用内存的服务器上以–max-old-space-size = 8192启动节点脚本.经过9分钟的处理后,脚本退出并显示内存不足错误.
我是Node编程的新手,但我想我写了脚本来一次处理一行数据,而不在内存中保留任何内容.但是似乎某些对象引用被某种东西保留,因此脚本正在泄漏内存.这是完整的脚本:
var fs = require('fs');
var readline = require('readline');
var mongoose = require('mongoose');
mongoose.connect('mongodb://buzzard/xtra');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
var DeviceSchema = mongoose.Schema({
_id: String,
serial: String
});
var Device = mongoose.model('Device', DeviceSchema, 'devices');
function processLine(line) {
var serial = line.split(',')[8];
Device({
_id: serial,
serial: serial
}).save(function (err) {
if (err) return console.error(err);
});
}
function processFile(baseDir, fileName) {
if(!fileName.startsWith('qcx3'))
return;
var fullPath = `${baseDir}/${fileName}`;
var lineReader = readline.createInterface({
input: fs.createReadStream(fullPath)
});
lineReader.on('line', processLine);
}
function findFiles(rootDir) {
fs.readdir(rootDir, function (error, files) {
if (error) {
console.log(`Error: ${error}` );
return
}
files.forEach(function (file) {
if(file.startsWith('.'))
return;
var fullPath = `${rootDir}/${file}`;
fs.stat(fullPath, function(error, stat) {
if (error) {
console.log(`Error: ${error}` );
return;
}
if(stat.isDirectory())
dir(fullPath);
else
processFile(rootDir, file);
});
});
})
}
findFiles('c://temp/logs/compress');
我还注意到,当我在一个可以完全完成处理的较小测试集上运行脚本时,该脚本不会在最后退出.只要一直挂在那里,直到我控制它.这可能以某种方式相关吗?
我究竟做错了什么?
解决方法:
>该脚本没有退出,因为您已经打开了与猫鼬的连接,在处理完所有文件之后,您应该关闭该连接,脚本将完成.
>您有使用流的正确想法,但是我认为您在途中错过了一些东西,建议您在下面的文章中更新streamInterface和事件. https://coderwall.com/p/ohjerg/read-large-text-files-in-nodejs
>另一个问题源可能是mongodb,看来您做了很多插入操作,这可能与耗尽内存的mongodb的最大I / O有关.
内容总结
以上是互联网集市为您收集整理的javascript-nodejs用尽了内存来处理csv文件全部内容,希望文章能够帮你解决javascript-nodejs用尽了内存来处理csv文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。