节点版本:6.9.x
我的应用程序给了我FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
错误。
所以我尝试使用max_old_space_size
标志
在执行我的server.js时,我给出了--max_old_space_size=4096
参数。
然而,它仍然像以前一样崩溃。此外,我注意到崩溃时抛出的错误中的数字。看起来它仍然是1.4 GB的默认分配。
这是我的错误信息:
<--- Last few GCs --->
84567 ms: Mark-sweep 1375.1 (1401.9) -> 1374.7 (1402.9) MB, 88.7 / 0.4 ms (+ 0.8 ms in 3 steps since start of marking, biggest step 0.5 ms) [allocation failure] [GC in old space requested].
84648 ms: Mark-sweep 1374.7 (1402.9) -> 1374.7 (1402.9) MB, 81.3 / 0.0 ms [allocation failure] [GC in old space requested].
84734 ms: Mark-sweep 1374.7 (1402.9) -> 1374.3 (1401.9) MB, 86.0 / 0.0 ms [last resort gc].
84825 ms: Mark-sweep 1374.3 (1401.9) -> 1374.0 (1400.9) MB, 90.9 / 0.0 ms [last resort gc].
<--- JS stacktrace --->
==== JS stack trace =========================================
Security context: 0x1bf641bcfb39 <JS Object>
1: slowToString [buffer.js:460] [pc=0x2f7049a5d3d5] (this=0x93e46a2d6b1 <an Uint8Array with map 0x13be78e068d9>,encoding=0x1bf641bdd309 <String[4]: utf8>,start=53,end=3522765)
2: toString [buffer.js:~488] [pc=0x2f70499b77a6] (this=0x93e46a2d6b1 <an Uint8Array with map 0x13be78e068d9>)
3: arguments adaptor frame: 3->0
4: deserialize [/opt/myServer/node_modu...
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
1: node::Abort() [node]
2: 0x10d2fbc [node]
3: v8::Utils::ReportApiFailure(char const*, char const*) [node]
4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [node]
5: v8::internal::Factory::NewRawOneByteString(int, v8::internal::PretenureFlag) [node]
6: v8::internal::Factory::NewStringFromOneByte(v8::internal::Vector<unsigned char const>, v8::internal::PretenureFlag) [node]
7: v8::internal::Factory::NewStringFromUtf8(v8::internal::Vector<char const>, v8::internal::PretenureFlag) [node]
8: v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::String::NewStringType, int) [node]
9: node::StringBytes::Encode(v8::Isolate*, char const*, unsigned long, node::encoding) [node]
10: node::Buffer::Utf8Slice(v8::FunctionCallbackInfo<v8::Value> const&) [node]
11: v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) [node]
12: 0x9da914 [node]
13: 0x9daffe [node]
14: 0x2f7047a092a7
Aborted (core dumped)
在&#34;最后几个GC&#34;部分,提到的内存大小总是在1404 MB左右。我做错了什么?
系统是否无法再分配内存?
答案 0 :(得分:7)
确保将选项放在脚本的文件名之前:
node --max-old-space-size=10000 index.js
node index.js --max-old-space-size=10000
这个让我有一段时间。
答案 1 :(得分:2)
现在此标志已无用:
大于等于12的节点版本不需要使用 --optimize_for_size和--max_old_space_size标志,因为JavaScript堆限制将基于可用内存。
答案 2 :(得分:1)
您可以为单个脚本添加标志,但是我发现它并不总是有效。我通常使用一些在外壳程序上运行命令的CI工具,因此对我来说,在package.json脚本部分中不包含标志是可以的,您也可以选择使用。还有2个选项。所有3:
选项1.将标志设置为单节点脚本:
node --max-old-space-size=4076 /path/to/script.js
选项2。为单外壳设置环境变量:
NODE_OPTIONS="--max-old-space-size=4076"
node /path/to/script.js
选项3.为此外壳程序以及该外壳程序产生的所有进程设置环境变量:
export NODE_OPTIONS="--max-old-space-size=4076"
node /path/to/script.js
选项#3 在第一个方法不起作用时给了我很多帮助:)
答案 3 :(得分:0)
尝试使用--max-old-space-size = 4096,如果它不起作用,看看你是否有空闲内存来分配4gb。
答案 4 :(得分:0)
如果您使用Express Generator,则在package.json更新脚本中
scripts": {
"start" :"node --max-old-space-size=4076 ./bin/www"
}
答案 5 :(得分:0)
设置
export NODE_OPTIONS="--max-old-space-size=16384"
在运行 npm 命令之前
答案 6 :(得分:-1)
我的解决方案与 html 相关。 我使用的是 Vue 2,在我的 html 模板上,我在 if 语句中使用了动态数据:
<div>
{{variableOne
?variableOne
:variableTwo}}
</div>
所以我的错误是似乎你不能在括号内的多一行中编写 if 语句,所以我修复它只是在一行中编写代码:
<div>
{{variableOne?variableOne:variableTwo}}
</div>