javascript - 致命错误:接近堆限制的无效标记压缩分配失败-脚本上的 JavaScript 堆内存不足
问题描述
我想查询一大块数据,但我使用的 API 只允许每个请求有几个响应,所以我使用这样的 for 循环拆分我的请求:
function writeTransfers() {
console.log("starting ...");
for(let i = 4620855; i < 13094434; i = i + 10) {
maker.getPastEvents("Transfer", { fromBlock: i, toBlock: i + 9 }).then(response => {
const buildPath = path.resolve(__dirname, "build");
const JSONCode = fs.readFileSync("./build/transfers.json", "utf-8");
let code = JSON.parse(JSONCode);
code.push(response[0]);
fs.outputJsonSync(
path.resolve(buildPath, "transfers.json"),
code
);
});
}
console.log("done ...");
}
基本上,代码从块 4620855 开始,到块 13094434 结束,查询块 i 的数据到块 i + 10,然后将 JSON 推送到 JSON 文件中。所以 JSON 文件的大小会随着时间的推移而增加,有时我会收到这个错误:
<--- Last few GCs --->
[9236:0000022EEFA59030] 161438 ms: Mark-sweep (reduce) 2023.6 (2053.7) -> 2022.8 (2053.9) MB, 1228.6 / 5.2 ms (average mu = 0.194, current mu = 0.037) allocation failure scavenge might not succeed
[9236:0000022EEFA59030] 162679 ms: Mark-sweep (reduce) 2023.9 (2050.9) -> 2023.1 (2051.9) MB, 1229.1 / 5.0 ms (average mu = 0.106, current mu = 0.010) allocation failure scavenge might not succeed
<--- JS stacktrace --->
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
1: 00007FF6EBA2052F napi_wrap+109311
2: 00007FF6EB9C5256 v8::internal::OrderedHashTable<v8::internal::OrderedHashSet,1>::NumberOfElementsOffset+33302
3: 00007FF6EB9C6026 node::OnFatalError+294
4: 00007FF6EC29163E v8::Isolate::ReportExternalAllocationLimitReached+94
5: 00007FF6EC2764BD v8::SharedArrayBuffer::Externalize+781
6: 00007FF6EC12094C v8::internal::Heap::EphemeronKeyWriteBarrierFromCode+1516
7: 00007FF6EC12BC8A v8::internal::Heap::ProtectUnprotectedMemoryChunks+1258
8: 00007FF6EC128E39 v8::internal::Heap::PageFlagsAreConsistent+2457
9: 00007FF6EC11DA61 v8::internal::Heap::CollectGarbage+2033
10: 00007FF6EC11BC65 v8::internal::Heap::AllocateExternalBackingStore+1317
11: 00007FF6EC13C057 v8::internal::Factory::NewFillerObject+183
12: 00007FF6EBE6C0B1 v8::internal::interpreter::JumpTableTargetOffsets::iterator::operator=+1409
13: 00007FF6EC319FED v8::internal::SetupIsolateDelegate::SetupHeap+463949
14: 00007FF6EC31AE9D v8::internal::SetupIsolateDelegate::SetupHeap+467709
15: 00000030E4FF8975
这是我第一次收到它,除了在 angular 或 vue.js 上运行构建脚本外,我在网上找不到太多东西。
谁能提供一些关于如何解决这个问题的见解?也许逻辑不正确,应该以其他方式完成?
先感谢您
解决方案
推荐阅读
- node.js - Nodejs逐行读取文件并将结果累积到全局对象中
- r - 在 Svydesign 对象中按十分位数计算平均值
- excel - 如果一个保留一个,如果更高,则在 Excel 中给出 2
- javascript - 为什么 javascript IF/ELSE 不能正常工作?
- cmd - 有没有办法在 Wix 项目中指定命令行别名?
- xaml - UWP 偏移 GridView 滚动条
- sql - 如何修复我的桌子以使其正常工作?
- clojure - 如何提取函数令牌生成器返回的值:(延迟(令牌生成器状态))
- linux - 如何使用 Rust 打开用户的默认编辑器并获取编辑后的内容?
- android - 形状的笔划不出现