最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

需要绕过“节点内存不足”的错误

IT培训 admin 4浏览 0评论

需要绕过“节点内存不足”的错误

我正在解析~250K XML并将数据加载到SQLite数据库中。我在带有8GB内存的Mac OS X笔记本电脑上使用节点版本10.15.1与cheeriobetter-sqlite3。我是readdirSync整个〜250K文件的文件夹,解析XML文件并使用10K批量的事务加载提取的数据。我正在使用--max_old_space_size=4096但仍然得到致命错误:无效的标记 - 紧凑堆附近限制分配失败 - JavaScript堆内存不足。

现在,如果我处理100K文件,然后退出节点,然后再次启动并处理剩余的~150K文件,那么一切正常。但是,我宁愿一气呵成,因为这是必须在无人看管的情况下完成的事情。鉴于我的约束,还有什么我可以做的吗?我无法使用具有更多内存的计算机,因为我无法访问一台计算机。我可以尝试更多地增加--max_old_space_size,或者我可以尝试做更小批量的事务,但我不确定这是否有帮助(我尝试每个事务使用8000个文件而不是10K,但是内存也耗尽)。现在唯一似乎有帮助的就是在中间退出节点。反正我可以模拟吗?也就是说,告诉节点释放所有内存并假装它已重新启动?还有其他想法吗?

回答如下:

所以,我终于偶然发现了我的问题(我使用“绊倒”,因为我不确定这是否是正确的策略,但它适用于我)。

我发现实际上增加--max_old_space_size值并没有真正帮助我。无论如何,正如我上面提到的,我的MacBook只有8GB,所以无论如何我都有一个低限。相当逆向,实际上有助于简单地减少我的批量。因此,我不是处理10K XML,而是将它们的数据存储在内存中,然后将它们插入到SQLite中的事务中,而是一次处理1K XML。当然,要处理~250K文件,我现在必须处理250个循环而不是25个循环,但它并没有真正增加我的时间太多。我发现处理时间非常线性,每1K文件大约5K ms(或每10K文件50K ms)。无论我在事务中抛出1K或10K INSERT,SQLite都非常快,但是在处理大量数据时,我的XML解析器进程开始起作用。事实上,这可能也不是cheerio的任何问题(我发现它非常好)。它可能是我的编码风格,可以改进很多。

在任何情况下,处理与--max_old_space_size=2048的1K交易都为我做了工作。节点使用的内存(如Activity Monitor中所示非常稳定,250K文件的整个转储在大约42分钟内被解析并加载到数据库中。我可以忍受。

需要绕过“节点内存不足”的错误

我正在解析~250K XML并将数据加载到SQLite数据库中。我在带有8GB内存的Mac OS X笔记本电脑上使用节点版本10.15.1与cheeriobetter-sqlite3。我是readdirSync整个〜250K文件的文件夹,解析XML文件并使用10K批量的事务加载提取的数据。我正在使用--max_old_space_size=4096但仍然得到致命错误:无效的标记 - 紧凑堆附近限制分配失败 - JavaScript堆内存不足。

现在,如果我处理100K文件,然后退出节点,然后再次启动并处理剩余的~150K文件,那么一切正常。但是,我宁愿一气呵成,因为这是必须在无人看管的情况下完成的事情。鉴于我的约束,还有什么我可以做的吗?我无法使用具有更多内存的计算机,因为我无法访问一台计算机。我可以尝试更多地增加--max_old_space_size,或者我可以尝试做更小批量的事务,但我不确定这是否有帮助(我尝试每个事务使用8000个文件而不是10K,但是内存也耗尽)。现在唯一似乎有帮助的就是在中间退出节点。反正我可以模拟吗?也就是说,告诉节点释放所有内存并假装它已重新启动?还有其他想法吗?

回答如下:

所以,我终于偶然发现了我的问题(我使用“绊倒”,因为我不确定这是否是正确的策略,但它适用于我)。

我发现实际上增加--max_old_space_size值并没有真正帮助我。无论如何,正如我上面提到的,我的MacBook只有8GB,所以无论如何我都有一个低限。相当逆向,实际上有助于简单地减少我的批量。因此,我不是处理10K XML,而是将它们的数据存储在内存中,然后将它们插入到SQLite中的事务中,而是一次处理1K XML。当然,要处理~250K文件,我现在必须处理250个循环而不是25个循环,但它并没有真正增加我的时间太多。我发现处理时间非常线性,每1K文件大约5K ms(或每10K文件50K ms)。无论我在事务中抛出1K或10K INSERT,SQLite都非常快,但是在处理大量数据时,我的XML解析器进程开始起作用。事实上,这可能也不是cheerio的任何问题(我发现它非常好)。它可能是我的编码风格,可以改进很多。

在任何情况下,处理与--max_old_space_size=2048的1K交易都为我做了工作。节点使用的内存(如Activity Monitor中所示非常稳定,250K文件的整个转储在大约42分钟内被解析并加载到数据库中。我可以忍受。

发布评论

评论列表 (0)

  1. 暂无评论