Memory management Node.js(和chrome V8)中的内存限制

Memory management Node.js(和chrome V8)中的内存限制,memory-management,node.js,Memory Management,Node.js,在web的许多地方,您将看到: 节点进程的内存限制是多少 答案是: 目前,默认情况下,V8在32位系统上的内存限制为512mb,在64位系统上的内存限制为1gb。可以通过将--max old space size设置为~1gb(32位)和~1.7gb(64位)的最大值来提高限制,但如果达到内存限制,建议将单个进程拆分为多个工作进程 由于Node.js似乎经常更新,有人能证实这一点吗? 更重要的是,在不久的将来会出现这种情况吗? 我想编写JavaScript代码,它可能需要处理4gb的JavaSc

在web的许多地方,您将看到:

节点进程的内存限制是多少

答案是:

目前,默认情况下,V8在32位系统上的内存限制为512mb,在64位系统上的内存限制为1gb。可以通过将--max old space size设置为~1gb(32位)和~1.7gb(64位)的最大值来提高限制,但如果达到内存限制,建议将单个进程拆分为多个工作进程

由于Node.js似乎经常更新,有人能证实这一点吗?

更重要的是,在不久的将来会出现这种情况吗?

我想编写JavaScript代码,它可能需要处理4gb的JavaScript对象(速度可能不是问题)


如果我不能在Node中完成,我最终会在java中完成(在64位机器上),但我宁愿不这样做。

看起来这是真的。当我尝试在缓冲区中分配50 Mb字符串时:

var buf=新缓冲区(50*1024*1024);
我有一个错误:

FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory

与此同时,process monitor中的Node.js使用了大约457 Mb的内存。

对于一些使用Node.js的人来说,这是一个很大的问题,这是一个好消息。V8的新内存限制现在对于64位是未知的(未测试),并且在32位环境中提高到32位地址空间所允许的最大值


阅读这里的更多信息:

我现在在Ubuntu linux上运行一个进程,它有一个明确的内存泄漏,节点0.6.0正在推8gb。认为已处理:)。

启动堆内存为8GB的nodejs应用程序

node --max-old-space-size=8192 app.js
查看或运行:

32位用户的内存限制最大值为3049 如果使用
os.arch()===“ia32”
运行Node.js,则可以设置的最大值为3049

在我使用节点v11.15.0和windows 10进行的测试中

  • 如果将其设置为3050,则它将溢出并等于设置为1
  • 如果将其设置为4000,则等于设置为51(4000-3049)
将Node.js的内存设置为最大
节点--最大旧空间大小=3049
使用TypeScript将Node.js的内存设置为最大
node-rts节点/寄存器——最大旧空间大小=3049

请参阅:

Node.js故意强制实施微服务架构。

如果你还没有看到这个,你应该看看这个。这是在2011年,他将Node.js引入世界。整个演讲非常互动。最后,他试图解释一个听起来很熟悉的概念:

Node是一个单线程系统,只使用一个内核。这不是一个问题,因为你可以开始更多。模块不共享内存。在某种程度上,在操作系统进程级别存在一个有意的边界。要进行通信,您必须打开套接字,序列化数据并将其发送给他们。这是一个很好的解决方案。如今,变得非常庞大的程序往往会超过一台机器。您需要能够在多台机器之间分发程序。即使在单台机器上强制执行,也会强制执行支持增长的模型。-瑞安·达尔(2011)

“微服务”一词仅在2个月后在威尼斯的一个研讨会上出现。但现在回想起来,很明显他想要解释的是什么。只是还没有一个词来形容它

一旦我们花时间将应用程序拆分为更小的微服务,大多数内存限制都会立即得到解决。

有许多方法可以设置微服务。然而,我通常认为最困难的挑战是决定服务之间的通信方式。您可能希望保持事情的简单,并且首先使用REST


如果您不想承担维护多个回购协议的开销,那么实际上您可以在所谓的“单回购”中提交所有内容。有像“lerna”这样的构建工具可以帮助您在服务之间共享“节点模块”。

在JS对象中究竟有什么东西可以占用4GB的空间?@dominic barnes:Images。电影。见鬼,这有关系吗?总有一天会有的。例如,MMORPG。我同意这些限制是残酷的,在v8的原始草案中使用32位整数进行寻址是一个严重的程序员错误。你说:“如果你想拥有4gb的数据,就不能将其作为JS对象。”如果这句话是真的(并且会持续一段时间),我会认为nodejs完全是炒作。因此,我希望你是错的。我很容易在nodejs对象中移动8GB左右,仅供参考。我认为在过去的几年里,自从这个问题被提出以来,已经发生了很大的变化。只要你流式传输数据,就没有内存限制。读写流是一种很好的设计模式,可以帮助您在不消耗V8内存的情况下完成所需的工作。我仍然(即使使用64位)需要使用--max old space size=10000(对于10GB)选项指定我需要更多内存,否则我会得到“致命错误:调用和重试分配失败-内存不足”Windows上任务管理器的内存使用率约为1.7GB。我在v7.8.0中轻松地使用了8gb+,真希望我的机器有更多内存。这里有一些关于这方面的详细信息:
node --help --v8-options