Meteor内存溢出问题

7
我正在使用Meteor制作网络爬虫引擎,需要进行HTTP GET请求并获得一个XML文件,但是该XML文件的大小超过了400千字节。
由于内存不足,我遇到了“out of memory”的异常。
result =Meteor.http.get 'http://SomeUrl.com'

致命错误:JS分配失败 - 进程内存耗尽

有没有办法增加变量的内存限制?

6个回答

3

我正在Windows上开发,遇到了同样的错误。在我的情况下,这是由于大量的console.log语句造成的。我禁用了日志语句,现在又可以正常工作了。


抱歉回复晚了,实际上在Linux上我也遇到了同样的问题,很多时间都是由于日志输出过大造成的。 - Z. Clément
我从未想过尝试这个,但它解决了问题!(在Windows上使用Meteor 1.2.1) - Kiv

3
可以增加可用于使用meteor生成的节点应用程序的内存。
我尝试在meteor脚本中调用的节点实例中使用--max-old-space-size标志以及尝试在meteor-tool脚本中更改它,但没有成功。
但是,设置环境变量`NODE_OPTIONS="--max-old-space-size=8192"`对我有用。
我在这个帖子中看到了提到它:https://groups.google.com/forum/#!topic/meteor-talk/C5oVNqm16MY

3

如果你在Windows上进行开发

找到以下路径下的meteor.bat文件: /APPData/Local/.meteor/packages/meteor-tool/<build-tool-version>/

编辑批处理文件中调用node.exe的最后一行,将其更改为:

"%~dp0\dev_bundle\bin\node.exe" --max-old-space-size=2048 "%~dp0\tools\main.js" %*

希望这可以帮到你。


以上内容对我在Meteor 1.2上没有帮助。我找到了另一个解决方案,但如果有人必须以这种方式解决它,看起来非常接近!注意:在Meteor 1.2中,您正在调用\tools\index.js而不是\tools\main.js。 - Lucidity

2
你需要增加服务器的内存数量,例如通过启用交换内存。如果你使用Linux系统,可以参考DigitalOcean的在Ubuntu 14.04上启用交换内存的指南了解如何操作。
我不知道如何处理Node内存耗尽的情况,除非你将GET请求分离到子进程中,这样整个服务器就不会因为内存耗尽而崩溃。
要增加Node的内存限制,可以使用Node的--max_old_space_size选项。

谢谢回复。但是我的交换已经启用了。我有4GB的内存,所以我认为这是因为Meteor使用Node,而Node有一个内存限制。 - Z. Clément
@Logoosse 你尝试过设置--max-old-space-size来增加可用内存的数量吗?直到现在我自己也不知道这个设置。 - aknuds1
我完成了,但是 Meteor 不是 Node.js,只是使用 Node.js,所以该命令不起作用。 - Z. Clément
@Logoosse 我其实不确定如何通过Meteor传递Node选项,但至少在我的服务器上(而不是本地),我直接使用Node(应用程序已经取消了Meteor化),因此在这种情况下,我可以传递任何选项。 - aknuds1
我已经在Meteor论坛上询问了,如何通过Meteor传递这个选项。 - aknuds1

1

我知道这个问题已经解决了,而且有点老了,但是我想分享一下我的经验。经过一些研究,我刚刚更新了我的Meteor版本。看起来他们最近更加关注内存不足错误。所以我建议你更新到新的Meteor版本。


1

在使用Meteor 1.1.0.3的Windows 10上也是一样:

C:\Users\Cees.Timmerman\AppData\Local\.meteor\packages\meteor-tool\1.1.4\mt-os.windows.x86_32\tools\fiber-helpers.js:162
    }).run();
       ^
FATAL ERROR: Evacuation Allocation failed - process out of memory

通过在settings.json中设置控制台日志级别为“warning”,而不是像Winston 2.1.0(var level = Meteor.settings.log_level)这样的记录器包内部使用的“debug”级别,已经解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接