我收到以下错误:
FATAL ERROR: JS Allocation failed - process out of memory
我可以列举几十个(是的,几十个)我试图找到这个问题根源的东西,但实际上它太过分了。以下是关键点:
我的假设是(因为第二点),泄漏可能不是原因;相反,似乎可能有一个非常大的SINGLE对象。以下主题支持这一理论:: In Node.js using JSON.stringify results in 'process out of memory' error
我真正需要的是找出应用程序崩溃时内存状态的某种方式,或者可能是导致致命错误的堆栈跟踪。
基于我上面的假设,10分钟的堆转储不足(因为对象不会驻留在内存中)。
答案 0 :(得分:49)
仅仅因为这是目前谷歌的最佳答案,我想我会为我刚遇到的案例添加一个解决方案:
我使用express与ejs模板有这个问题 - 问题是我没有关闭ejs块,文件是js代码 - 像这样:
var url = '<%=getUrl("/some/url")'
/* lots more javascript that ejs tries to parse in memory apparently */
这显然是一个超级特定的情况,OP的解决方案应该在大多数时间使用。但是,OP的解决方案不适用于此(ejs堆栈跟踪不会由ofe
表示。)
答案 1 :(得分:21)
我必须向Trevor Norris on this one for helping to modify node.js itself提供巨大的道具,以便在发生此错误时自动生成堆转储。
最终,为我解决这个问题的方法却更为平凡。我写了一些简单的代码,将每个传入的API请求的端点附加到日志文件中。我等待收集~10个数据点(崩溃)并比较在崩溃前60秒运行的端点。我发现在9/10的情况下,一个端点在崩溃之前就被击中了。
从那里开始,只需要深入研究代码。我把所有东西都减少了 - 从我的mongoDB查询中返回更少的数据,只将必要的数据从一个对象传递回回调等等。现在我们已经比平均时间长了6倍而没有任何服务器上的单一崩溃,导致我希望它已经解决了......现在。
答案 2 :(得分:10)
此问题没有单一解决方案。
我阅读了不同的案例,其中大部分都与JS有关,但在我的情况下,例如,由于代码错误,它只是一个破碎的玉模板循环。
我猜这只是节点管理不善的语法错误 检查您的代码或发布它以找到问题。
答案 3 :(得分:7)
在我的情况下,我通过cap production deploy(capistrano)部署Rails 4.2.1并在收到资产预编译期间:
rake stdout:rake aborted! ExecJS :: RuntimeError:致命错误:疏散分配失败 - 处理内存不足 (execjs):1
我之前通过active_admin运行了十几个数据导入,似乎已经耗尽了所有内存
解决方案:首次运行服务器重启和部署....
答案 4 :(得分:4)
对于您正在序列化的对象,它是一个递归问题吗?这个问题在开始时很大,并且在递归成为问题之前内存不足?
我出于这个原因创建了safe-clone-deep npm模块......基本上你会想要做以下事情。
var clone = require('safe-clone-deep');
...
return JSON.stringify(clone(originalObject));
这将允许您克隆几乎任何将安全序列化的对象。此外,如果其中一个对象继承自Error
,它将序列化继承的name
,message
和stack
属性,因为这些属性通常不会序列化。
答案 5 :(得分:1)
在我们的例子中,我们意外地分配了一个巨大的(稀疏的)数组,导致util.format爆炸:
http://grahamrhay.wordpress.com/2014/02/24/fatal-error-js-allocation-failed-process-out-of-memory/
答案 6 :(得分:1)
在我的例子中,我使用[]初始化了一个关联数组(Object)。一旦我将其初始化为{},问题就会消失。
答案 7 :(得分:1)
就我而言,我在开发过程中用于播种数据库的文件导致了泄漏。出于某种原因,节点不喜欢我在文件末尾的多行注释。我无法看到它有什么问题,但是消除过程意味着我知道这个文件的这一部分。
答案 8 :(得分:1)
分析一些案例,最常见的问题是无限循环。在复杂的应用程序中很难解决这个问题,即测试驱动开发很方便!!
答案 9 :(得分:1)
我花了几天时间找出问题的根本原因。仅在AWS EC2实例中,在Webpack构建期间开始出现“ JS-内存不足”错误。虽然在我的本地系统中构建成功。
原因是以下代码:
上一个:
import { ShoppingCartOutlined } from "@material-ui/icons/ShoppingCartOutlined";
已由以下人员修复:
import ShoppingCartOutlined from "@material-ui/icons/ShoppingCartOutlined";
这可能会帮助使用material-ui / icons的人,并最终出现此错误。
答案 10 :(得分:0)
分享这里发生的事情:
我在这个问题上失去了一些日子,直到我发现在某个文件中我从一个静态文件导入一个类,一个构建文件。它使构建过程永无止境。类似的东西:
import PropTypes from "../static/build/prop-types";
修复真正的源码解决了所有问题。
答案 11 :(得分:0)
在AWS实例上使用npm 5.0.3,我们在npm全局文件夹本身上遇到了权限问题,这可能会导致我们发生这种情况。
我们跑了:sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
现在它工作正常
答案 12 :(得分:0)
在使用foo :: c a b -> a -> b -> ()
foo _ _ _ = ()
bar = foo ((), 42, 'a') 42 'a' -- typechecks
在服务器上安装节点软件包时,我遇到了同样的问题。
npm i
我的解决方案是添加其他标志
FATAL ERROR: Committing semi space failed. Allocation failed - process out of memory
1: node::Abort() [npm]
2: 0x556f73a6e011 [npm]
3: v8::Utils::ReportOOMFailure(char const*, bool) [npm]
4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [npm]
5: v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [npm]
6: v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [npm]
7: v8::internal::Heap::CollectAllGarbage(int, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [npm]
8: v8::internal::StackGuard::HandleInterrupts() [npm]
9: v8::internal::Runtime_StackGuard(int, v8::internal::Object**, v8::internal::Isolate*) [npm]
10: 0x159539b040bd
Aborted
希望可以为某人节省时间
答案 13 :(得分:0)
可能是节点版本的问题。 我在运行 React 应用程序时经常遇到同样的问题。我在节点版本 14.7.2 中遇到了这个问题。尝试了很多解决方案,例如增加堆内存、清除缓存、重新安装节点模块。它没有解决问题。最后,将 Node 版本降级到 10.24.1,这停止了错误消息。
答案 14 :(得分:-1)
我有同样的问题。我使用命令“ sudo reboot”重新启动了系统。然后再试一次。奏效了。