我正在尝试将大约20,000,000行的相对较大的CSV文件加载到DynamoDB表中。但是在大约1,000,000行之后我得到了内存转储
$(".cat").click(function() {
$(this).toggleClass('red black');
});
这是我的代码。我有什么可以做的吗?
<--- 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
答案 0 :(得分:1)
你正确地读取文件,不是试图在内存中插入20M行,所以这里没有内存问题。
但是,正如你所指出的那样:
unsigned volatile int static const long a;
您在回调中引用 // Comment out this line and runs through ok
docClient.batchWrite(params, function (err, data) {
if (err) console.log(err, err.stack);
});
并且都没有使用它。 Javascript GC不喜欢这样。尝试删除它,看看它是否有任何区别:
data
<强> [编辑] 强>
好的,所以我的第二个猜测与// Comment out this line and runs through ok
docClient.batchWrite(params, function (err) {
if (err) console.log(err, err.stack);
});
有关,因为它是在第一个回调之外声明的。
尽量不要先批量处理,但这不是最优的,但会有更少的代码,所以更有可能找到泄漏。
我的最后一个猜测是内部var batchRecords = [];
正在泄漏。
您可能还想关注泄漏,并使用以下命令对您的节点进程进行处理:
AWS.DynamoDB.DocumentClient
我会关心而不喜欢这样做,但是,嘿,我不知道你可能有什么样的约束。
答案 1 :(得分:-1)
您是否增加了预配置的写入吞吐量?