根据我的知识,大多数node.js版本对每个进程的内存限制大约为1GB,基于以下信息:
目前,默认情况下,v8在32位系统上的内存限制为512MB,在64位系统上的内存限制为1.4GB。 https://github.com/nodejs/node-v0.x-archive/wiki/FAQ
这是一个旧档案,事情可能有所改善。但是,我感兴趣的是如果要使用
require('child_process').fork("newProcess.js")
有可能克服这个限制吗?
因此,创建新的V8实例将为JavaScript对象创建新的内存池。
我之所以要问的是,我找不到确切证实这种情况的可靠来源,即使文件强烈建议会出现这种情况,因为它声明:
这些子Node.js进程仍然是V8的全新实例。
答案 0 :(得分:2)
如果我理解了你的问题,你想使用不同的内存限制(--max-old-space-size
参数)fork()。默认情况下,新的nodeJS实例将从父级继承它。
但是,您可以绕过此限制将参数传递给forked()实例,如下所示:
require('child_process').fork("newProcess.js", {
execArgv: ['--max-old-space-size=4096']
});)
这将分叉您的进程,但内存限制为4Gb。
答案 1 :(得分:0)
node --max-old-space-size=4096
应该有用。
AFAIK的限制取决于V8的缓冲区大小。 fork()
当然可以处理更大的数据,只要你不将所有数据保存在缓冲区中。
答案 2 :(得分:0)
这与Boriel的答案非常相似,但更好(IMHO)。
在环境中传递节点选项--max-old-space-size可使您直接调用“ .js”文件。
var env = Object.assign({ 'NODE_OPTIONS' : '--max-old-space-size=4096' }, process.env );
require('child_process').fork("newProcess.js", { env: env });
请注意,如果在运行原始程序时已经在使用某些节点选项,则必须将该选项与现有选项合并。