Node/V8 如何确定其最大堆大小?

问题描述 投票:0回答:1

我在这里寻找规范的答案。

如果我有一个如下所示的应用程序:

const  {getHeapStatistics} = require("v8");
console.log(getHeapStatistics())

我得到:

{
  total_heap_size: 5275648,
  total_heap_size_executable: 262144,
  total_physical_size: 4997120,
  total_available_size: 4342409984,
  used_heap_size: 3760144,
  heap_size_limit: 4345298944, // 👈 4.046875GB
  malloced_memory: 163968,
  peak_malloced_memory: 58368,
  does_zap_garbage: 0,
  number_of_native_contexts: 1,
  number_of_detached_contexts: 0,
  total_global_handles_size: 8192,
  used_global_handles_size: 2240,
  external_memory: 1328787
}

现在我可以使用

heap_size_limit 节点选项来控制 
max-old-space-size
值。
.

如果编写一个不断向数组添加项目的应用程序,当分配的数据大小超过该值时,就会出错 - 节点不会动态增加最大大小。

似乎 4GB 是默认值,但是对此有规范的答案吗?我到处都找不到。

Stack Overflow 上还有其他问题询问:

V8 堆大小限制(无答案)

node.js v8
1个回答
0
投票

您应该考虑到默认堆大小限制实际上非常简单。

V8 在 64 位系统上将其设置为 4GB 左右,在 32 位系统上设置为 1.4GB 左右。当我的一个数据量大的应用程序不断崩溃时,我发现了这一点,我知道这很烦人......

有趣的是,V8 对于这些限制相当保守。在 64 位系统上,它将使用 4GB 默认内存或可用系统内存的一半,以较小者为准。 当您考虑一下时,这是有道理的,您不希望单个 Node.js 进程占用您的所有 RAM。

不过,您始终可以覆盖这些默认值。我在处理大型数据集时经常这样做:

node --max-old-space-size=8192  # This gives you 8GB to work with
© www.soinside.com 2019 - 2024. All rights reserved.