我在理解Node.js如何基于参数的行为时遇到了一些麻烦max-old-space-size
。
以我的情况为例,我正在运行两个t2.small
AWS实例(2GB RAM)。
不知道为什么,但是我确实设置了max-old-space-size=4096
(4GB)。在这种情况下,节点会做什么?此配置是否可能导致内存分配失败?
如何max-old-space-size
根据服务器资源确定正确的值?
我的应用程序在不断增加内存使用量,我试图了解有关节点内部的所有内容。
我在理解Node.js如何基于参数的行为时遇到了一些麻烦max-old-space-size
。
以我的情况为例,我正在运行两个t2.small
AWS实例(2GB RAM)。
不知道为什么,但是我确实设置了max-old-space-size=4096
(4GB)。在这种情况下,节点会做什么?此配置是否可能导致内存分配失败?
如何max-old-space-size
根据服务器资源确定正确的值?
我的应用程序在不断增加内存使用量,我试图了解有关节点内部的所有内容。
--optimize-for-size
减少内存使用。
Answers:
“旧空间”是V8托管(又称垃圾收集)堆(即JavaScript对象所在的地方)中最大和最可配置的部分,该--max-old-space-size
标志控制其最大大小。随着内存消耗接近极限,V8将在垃圾回收上花费更多时间,以释放未使用的内存。
如果堆内存消耗(例如,GC无法释放的活动对象)超过了限制,则V8将使您的进程崩溃(由于缺少替代项),因此您不想将其设置得太低。当然,如果将它设置得太高,则V8允许的额外堆使用量可能会导致整个系统内存不足(并且由于缺乏替代性,所以交换或杀死随机进程)。
总之,在一台具有2GB内存的机器上,我可能会设置--max-old-space-size
为1.5GB左右,以便为其他用途留一些内存并避免交换。
d8 --help
:--max-old-space-size (max size of the old space (in Mbytes))
这些选项现在已由node正式记录。对于2GB的计算机,您可能应该使用:
NODE_OPTIONS=--max-old-space-size=1536
确定使用量:您可以使用来查看Linux计算机上的可用内存free -m
。请注意,您可以结合使用free
和和buffers/cache
内存,因为它们buffers/cache
可能会被丢弃(这些缓冲区和缓存是使用否则未使用的内存的不错方法)。
请注意官方文档中max-old-space-size
还提到:
在具有2GB内存的计算机上,考虑将其设置为1536(1.5GB)
因此,上面的值。考虑到基本操作系统所需的内存量没有太大变化,因此您可以在4GB的计算机上愉快地执行3.5等操作。
当为执行中的应用程序分配的内存小于所需的内存时,会发生此错误。默认情况下,Node.js中的内存限制为512 MB。要增加此数量,您需要设置内存限制参数—-max-old-space-size
。这将有助于避免内存限制问题。
node --max-old-space-size=1024 index.js #increase to 1gb
node --max-old-space-size=2048 index.js #increase to 2gb
node --max-old-space-size=3072 index.js #increase to 3gb
node --max-old-space-size=4096 index.js #increase to 4gb
node --max-old-space-size=5120 index.js #increase to 5gb
node --max-old-space-size=6144 index.js #increase to 6gb
node --max-old-space-size=7168 index.js #increase to 7gb
node --max-old-space-size=8192 index.js #increase to 8gb
https://medium.com/@vuongtran/how-to-solve-process-out-of-memory-in-node-js-5f0de8f8464c
node --v8-options
)默认报告为4096,而没有设置max-old-space-size
我正在运行的测试套件,则可以毫无问题地分配到1.5Gb。链接的中篇文章来自2016年,因此自撰写以来,事情可能会继续发展。
node -e "console.log(`node heap limit = ${require('v8').getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`)"
-> v12.18.0和v14.3.0-> 2096Mb,v10.20.1-> 1432Mb
heap_size_limit
。对于普通的UNIX shell,需要用不同的引号引起来:node -e 'console.log(`node heap limit = ${require("v8").getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`)'
如果只想使其从正在处理的项目中运行,请执行以下两个步骤:
在项目中cd到node_module / @ angular cd node_module / @ angular
现在运行以下命令export NODE_OPTIONS =-max-old-space-size = 8192