NodeJS建议使用max-old-space-size

时间:2018-01-22 17:24:35

标签: node.js v8

我很难理解NodeJS如何根据参数max-old-space-size行事。

在我的例子中,我正在运行两个t2.small aws实例(2GB内存)。

不确定原因,但我确实设置了max-old-space-size = 4096(4GB)。在这种情况下节点做什么?这种配置会导致可靠的内存分配失败吗?

如何根据服务器资源确定max-old-space-size的正确值?

PD:我的应用程序不断增加内存使用量,我正在尝试了解节点内部的所有内容。

4 个答案:

答案 0 :(得分:47)

"旧空间"是V8管理(也称为垃圾收集)堆(即JavaScript对象所在的位置)中最大且最可配置的部分,--max-old-space-size标志控制其最大大小。随着内存消耗接近极限,V8将花费更多时间进行垃圾收集,以释放未使用的内存。

如果堆内存消耗(即GC无法释放的活动对象)超出限制,V8将使您的进程崩溃(缺少替代方案),因此您不希望将其设置得太低。当然,如果你设置得太高,那么V8允许的额外堆使用可能会导致整个系统内存不足(并且交换或杀死随机进程,因为缺少备选方案)。

总之,在具有2GB内存的计算机上,我可能会将--max-old-space-size设置为大约1.5GB,以留出一些内存用于其他用途并避免交换。

答案 1 :(得分:18)

2020更新

这些选项是now documented officially by node。对于2GB的计算机,您可能应该使用:

NODE_OPTIONS=--max-old-space-size=1536

确定使用量:您可以使用free -m查看Linux计算机上的可用内存。请注意,您可以结合使用freebuffers/cache内存,因为可以丢掉buffers/cache(这些缓冲区和缓存是使用未使用的内存的好方法)。

请注意official documentation formax-old-space-size还提到:

在具有2GB内存的计算机上,考虑将其设置为1536(1.5GB)

因此得到上面的值。考虑到基本操作系统所需的内存量没有太大变化,因此您可以在4GB的计算机等上愉快地执行3.5。

答案 2 :(得分:11)

为执行中的应用程序分配的内存小于所需的内存时,将发生此错误。 默认情况下,Node.js中的内存限制为512 MB。要增加此数量,您需要设置内存限制参数*** Error in `./bin': realloc(): invalid next size: 0x0000000000f67010 *** Aborted 。这将有助于避免出现内存限制问题。

—-max-old-space-size

https://medium.com/@vuongtran/how-to-solve-process-out-of-memory-in-node-js-5f0de8f8464c

答案 3 :(得分:-8)

如果您只是想使其从正在处理的项目中运行, 请遵循以下两个步骤:

  1. 在您的项目cd中,指向node_module / @ angular cd node_module / @ angular

  2. 现在运行以下命令 出口NODE_OPTIONS =-max-old-space-size = 8192