我正在尝试编写一个下载大型zip文件的程序,将其解压缩到内存中,然后将内容(一系列CSV文件)推送到MongoDB。但是,我一直在点程序停止并打印
FATAL ERROR: CodeRange::GetNextAllocationBlock Allocation failed - process out of memory
当缓冲区不再使用时,我一直将缓冲区设置为null,一旦它们在Mongo中,就将记录设置为null,并防止一次处理多个文件。这些都没有帮助。是否还有释放记忆的技巧?
答案 0 :(得分:10)
我会考虑的事情(不确定它是否会按预期完成):
确保引用消失:
手动执行GC并增加v8堆大小:
从父进程生成(并终止)子进程以执行工作:
这样我觉得操作系统会回收子进程的内存,即使它没有返回内存。
Ram as filesystem:
这样你可以将文件系统视为内存(让操作系统将其放入内存中)。
使用freelist:
答案 1 :(得分:0)
node.js对内存分配有1.4Gb的硬限制。但我不认为无论如何将大文件下载到内存是个好主意,我建议将文件写入磁盘,解压缩到磁盘,然后推送到MongDB。这样你总是会在内存中运行一小块数据