-2

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

它适用于小于 3MB 的小型 Excel 文件。但在超过 3MB 的情况下,节点应用程序因抛出错误“ CALL_AND_RETRY_2 Allocation failed - process out of memory ”而崩溃。

使用的技术: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 集合中。

根据我的知识,STEP2 导致内存不足错误,因为我将整个 xlsx 值存储在单个 JS 对象中?

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

谢谢。

4

1 回答 1

1

您可以尝试使用

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

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

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

于 2013-08-20T16:04:40.193 回答