NodeJS:如何在大型xlsx文件解析时处理进程内存不足错误

时间:2013-08-20 15:35:55

标签: excel node.js mongodb out-of-memory

我使用nodejs逐个单元地解析xlsx文件,解析的单元格值将存储在mongodb中。

对于小于3MB的小型excel文件,它可以正常工作。但是在超过3MB的情况下,节点应用程序因为“ CALL_AND_RETRY_2分配失败 - 处理内存不足”而导致错误崩溃。

二手技术: Nodejs:v0.8.22, MongoDB:2.2.4

系统配置: 操作系统:Ubuntu 12.04, 内存:4GB, 处理器:Intel I5

我将xlsx数据解析并存储到mongodb中的步骤:

  1. 解压缩上传的xlsx文件。
  2. 从上传的xlsx文件的提取的xml文件中读取样式,共享每个工作表的字符串,单元格和定义的名称,并将这些读取的值保存到JS对象中。
  3. 然后通过迭代JS对象上的值将读取的值保存到mongodb集合中。
  4. 根据我的知识,STEP2导致内存不足错误,因为我将整个xlsx值存储在一个JS对象中?。

    请提供一些想法,以改变上述过程的方式或其他一些有效的方法来处理这种情况。

    感谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用

启动节点

node --max-old-space-size=3000 app

将max mem增加到3 GB。但是,节点的默认内存限制在32位系统上为512 MB,在64位上为1 GB(根据https://github.com/joyent/node/wiki/FAQ)。如果在解析3 MB excel文件时遇到这些限制,那听起来很奇怪 - 可能是内存泄漏。也许你想发布代码?

顺便说一下,Node 0.8并不是最新最好的......也许你也应该尝试更新到更新的版本。