设置 --max-old-space-size 但 Node 仍然超出限制而不会导致任何错误
Setting --max-old-space-size but Node still exceeds the limit without causing any errors
我将最大大小设置为512mb 但它似乎没有引起任何错误,它超过了限制并上升 1.3GB。我知道节点会在接近限制时尝试 GC 并在超过设定限制时出错。我正在 运行 测试,我希望它 不超过 512mb 限制。
OS: Ubuntu 20.04.2 LTS
NODE VERSION : 10.19.0
node --max-old-space-size=512 Server.js
I just need to know if that's a normal behavior
不,不是。
It makes the flag pointless.
通过一个简单的演示程序,该标志按预期工作:
$ cat demo.js
let big = [];
while (true) {
big.push(new Array(10000));
}
$ node --version
v16.3.0
$ node --max-old-space-size=512 demo.js
<--- Last few GCs --->
[20343:0x563cd38c25a0] 1112 ms: Mark-sweep 477.8 (523.7) -> 477.5 (525.7) MB, 158.4 / 0.0 ms (average mu = 0.124, current mu = 0.011) allocation failure scavenge might not succeed
<--- JS stacktrace --->
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
1: 0x563ccf1a6680 node::Abort() [node]
2: 0x563ccf0b28e9 node::FatalError(char const*, char const*) [node]
3: 0x563ccf332082 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [node]
...
请注意,Node 的命令行标志解析是依赖于顺序的。例如。如果您 运行 node demo.js --max-old-space-size=512
,则该标志将不适用于 demo.js
.
的执行
如果这不能回答您的问题,请更清楚地说明您测量的内容。例如,如果您查看进程的整体内存使用情况,预计会大于 512MB,因为“old space”只是进程中的一部分——它是最多的部分可控的。根据您的应用程序的功能,可能会有其他内存使用者。虽然我会发现额外的 800MB 令人惊讶,但只要您不提供重现或有关您测量的内容和方法的更多详细信息,一切皆有可能。
我将最大大小设置为512mb 但它似乎没有引起任何错误,它超过了限制并上升 1.3GB。我知道节点会在接近限制时尝试 GC 并在超过设定限制时出错。我正在 运行 测试,我希望它 不超过 512mb 限制。
OS: Ubuntu 20.04.2 LTS
NODE VERSION :10.19.0
node --max-old-space-size=512 Server.js
I just need to know if that's a normal behavior
不,不是。
It makes the flag pointless.
通过一个简单的演示程序,该标志按预期工作:
$ cat demo.js
let big = [];
while (true) {
big.push(new Array(10000));
}
$ node --version
v16.3.0
$ node --max-old-space-size=512 demo.js
<--- Last few GCs --->
[20343:0x563cd38c25a0] 1112 ms: Mark-sweep 477.8 (523.7) -> 477.5 (525.7) MB, 158.4 / 0.0 ms (average mu = 0.124, current mu = 0.011) allocation failure scavenge might not succeed
<--- JS stacktrace --->
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
1: 0x563ccf1a6680 node::Abort() [node]
2: 0x563ccf0b28e9 node::FatalError(char const*, char const*) [node]
3: 0x563ccf332082 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [node]
...
请注意,Node 的命令行标志解析是依赖于顺序的。例如。如果您 运行 node demo.js --max-old-space-size=512
,则该标志将不适用于 demo.js
.
如果这不能回答您的问题,请更清楚地说明您测量的内容。例如,如果您查看进程的整体内存使用情况,预计会大于 512MB,因为“old space”只是进程中的一部分——它是最多的部分可控的。根据您的应用程序的功能,可能会有其他内存使用者。虽然我会发现额外的 800MB 令人惊讶,但只要您不提供重现或有关您测量的内容和方法的更多详细信息,一切皆有可能。