DynamoDBテーブルに約20,000,000行の比較的大きなCSVファイルをロードしようとしています。しかし、約1,000,000行後にメモリダンプを取得します。NodeJsを使用してAWS DynamoDBにインポートするとメモリリークが発生する
<--- Last few GCs --->
136289 ms: Scavenge 1397.5 (1457.9) -> 1397.5 (1457.9) MB, 0.3/0 ms (+ 0.0 ms in 1 steps since last GC) [allocation failure] [incremental marking delaying mark-sweep].
137127 ms: Mark-sweep 1397.5 (1457.9) -> 1397.5 (1457.9) MB, 841.8/0 ms (+ 0.0 ms in 1 steps since start of marking, biggest step 0.0 ms) [last resort gc].
137989 ms: Mark-sweep 1397.5 (1457.9) -> 1397.5 (1457.9) MB, 858.6/0 ms [last resort gc].
<--- JS stacktrace --->
==== JS stack trace =========================================
Security context: 0000009B9BAB4639 <JS Object>
1: stringify [native json.js:157] [pc=000003139D3AB8C4] (this=0000009B9BAAE771 <a JSON with map 0000004A38909B69>,u=0000009B9BAD8B09 <an Object with map 000001D75FD60619>,v=0000009B9BA041B9 <undefined>,I=0000009B9BA041B9 <undefined>)
2: arguments adaptor frame: 1->3
3: buildRequest [c:\Workspace\Archive\node_modules\aws-sdk\lib\protocol\json.js:~5] [pc=000003139D345857] (this=0000...
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
これは私のコードです。何か私にできることはありますか?
function processFile(fileName)
{
var docClient = new AWS.DynamoDB.DocumentClient();
var lineReader = readline.createInterface({
input: fs.createReadStream(fileName)
});
var batchRecords = [];
lineReader.on('line', function (line) {
var split = line.split(',');
var obj = {
field1: split[0],
field2: split[1],
field3: split[2],
field4: split[3],
field5: split[4],
field6: split[5]
}
batchRecords.push(obj);
if (batchRecords.length == 25) {
var putRequests = batchRecords.map((e) => {
return {
PutRequest: {
Item: e
}
}
});
var params = {
RequestItems: {
"MyTable": putRequests
}
};
// Comment out this line and runs through ok
docClient.batchWrite(params, function (err, data) {
if (err) console.log(err, err.stack);
});
batchRecords = [];
}
});
lineReader.on('close', function() {
console.log('Done');
});
}
はい。それが10,000であっても、それでもエラーが出ます。可能であれば、それを100,000に設定すれば動作するかもしれませんが、実行するには幸運にもなります。 – Craig
DynamoDBサービスのスループットは、お使いのコンピュータのメモリとは関係ありません。 – herve