Node.js因内存不足而被终止

Node.js因内存不足而被终止,node.js,memory,Node.js,Memory,我在一台只有512MB内存的服务器上运行Node.js。问题是,当我运行脚本时,它将由于内存不足而被终止 默认情况下,Node.js内存限制为512MB。所以我认为使用——max old space size是无用的 遵循/var/log/syslog的内容: Oct 7 09:24:42 ubuntu-user kernel: [72604.230204] Out of memory: Kill process 6422 (node) score 774 or sacrifice child

我在一台只有
512MB
内存的服务器上运行
Node.js
。问题是,当我运行脚本时,它将由于内存不足而被终止

默认情况下,
Node.js
内存限制为
512MB
。所以我认为使用
——max old space size
是无用的

遵循
/var/log/syslog
的内容:

Oct  7 09:24:42 ubuntu-user kernel: [72604.230204] Out of memory: Kill process 6422 (node) score 774 or sacrifice child
Oct  7 09:24:42 ubuntu-user kernel: [72604.230351] Killed process 6422 (node) total-vm:1575132kB, anon-rss:396268kB, file-rss:0kB
有没有一种方法可以在不升级内存的情况下消除内存不足?(如使用持久性存储作为附加RAM)

更新:
它是一个使用节点模块请求和IO的scraper。当它运行时,它将打开数百或数千个网页(但不是并行的)

如果您让节点访问可用512的最后一个MB,但仍然不够,那么有两种前进方式:

  • 减少程序的内存需求。这可能是也可能不是。如果您需要这方面的帮助,您应该发布另一个问题,详细说明您的功能和内存使用情况

  • 为服务器获取更多内存<代码>512mb并不多,尤其是在运行需要内存存储的其他服务(如数据库或消息队列)时


  • 第三种可能是使用
    交换
    空间(充当内存备份的磁盘存储),但这将对性能产生很大影响。如果你仍然想要它,谷歌如何为你的操作系统设置它,有很多关于这个主题的文章。这是操作系统配置,不是节点的。

    老问题,但这个答案可能会帮助人们。使用--max old space size并不是无用的

    在Nodejs 12之前,版本的堆内存大小取决于操作系统(32或64位)。因此,在下面的文档中,在64位机器上(仅旧一代)的内存将为1400 MB,与512mb相差甚远

    从Nodejs12开始,堆大小负责系统RAM;然而,Nodejs的堆并不是内存中唯一的东西,特别是当您的服务器没有专用于它时。因此,将--max old space size permit设置为对旧内存堆有一个限制,如果应用程序更接近,垃圾收集器将被触发并尝试释放内存


    我写了一篇关于我是如何观察到这一点的帖子:

    如果不知道什么样的数据使用了那么多的内存以及如何处理这些数据,就很难判断。redis等工具可以帮助您在NodeJ之外缓存常用数据。如何减少内存消耗完全取决于您在消耗最多内存的应用程序中所做的操作。因为你没有和我们分享这些,所以我们很难知道选择是什么。您可能需要从了解什么是使用最多内存开始。