我很难理解NodeJS如何根据参数max-old-space-size行事。
在我的例子中,我正在运行两个t2.small aws实例(2GB内存)。
不确定原因,但我确实设置了max-old-space-size = 4096(4GB)。在这种情况下节点做什么?这种配置会导致可靠的内存分配失败吗?
如何根据服务器资源确定max-old-space-size的正确值?
PD:我的应用程序不断增加内存使用量,我正在尝试了解节点内部的所有内容。
答案 0 :(得分:47)
"旧空间"是V8管理(也称为垃圾收集)堆(即JavaScript对象所在的位置)中最大且最可配置的部分,--max-old-space-size
标志控制其最大大小。随着内存消耗接近极限,V8将花费更多时间进行垃圾收集,以释放未使用的内存。
如果堆内存消耗(即GC无法释放的活动对象)超出限制,V8将使您的进程崩溃(缺少替代方案),因此您不希望将其设置得太低。当然,如果你设置得太高,那么V8允许的额外堆使用可能会导致整个系统内存不足(并且交换或杀死随机进程,因为缺少备选方案)。
总之,在具有2GB内存的计算机上,我可能会将--max-old-space-size
设置为大约1.5GB,以留出一些内存用于其他用途并避免交换。
答案 1 :(得分:18)
这些选项是now documented officially by node。对于2GB的计算机,您可能应该使用:
NODE_OPTIONS=--max-old-space-size=1536
确定使用量:您可以使用free -m
查看Linux计算机上的可用内存。请注意,您可以结合使用free
和buffers/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)
如果您只是想使其从正在处理的项目中运行, 请遵循以下两个步骤:
在您的项目cd中,指向node_module / @ angular cd node_module / @ angular
现在运行以下命令 出口NODE_OPTIONS =-max-old-space-size = 8192