节点如何处理分叉进程中的“ --max-old-space-size”?

时间:2019-04-22 14:12:26

标签: javascript node.js memory

我正在尝试调试Node.js的一些内存问题,特别是尝试传递要分配给节点服务器的数量以及两个子进程。我似乎找不到有关这些标志如何分配内存的官方文档。

我有一个父进程,我用

来调用
node --max-old-space-size=512 parent.js -child-1-memory=512 -child-2-memory=2048

我的意图是以每个进程的已知最大值启动这些进程。

在parent.js中:

// Child 1, intended value 512
const child1 = fork('child1.js', [], { 
    execArgv: ['--max-old-space-size=' + getArgValue('-child-1-memory')],
    env: { ... },
});

// Child 2, intended value 2048
const child2 = fork('child2.js', [], { 
    execArgv: ['--max-old-space-size=' + getArgValue('-child-2-memory')],
    env: { ... },
});

我目前有一个设置,其中Child 2的最大速度为1500M,所以我在这里的尝试是从2048M开始该过程。我能够看到运行ps -e | grep "child2.js"且参数为/usr/local/bin/node /path/to/child2.js --max_old_space_size=2048的进程,但这似乎没有生效。

我尝试过

node --max-old-space-size=3072 parent.js -child-1-memory=512 -child-2-memory=2048

以防孩子从父进程的池中抽出,但这没什么意义,因为我可以在OOM之前用完1500M。

我已经尝试过切换分叉的参数,指定

const child1 = fork('child1.js', ['--max-old-space-size=' + getArgValue('-child-1-memory')], { 
    execArgv: [],
    env: { ... },
});

但这似乎无关紧要。

一些注意事项:

  • 使用--max-old-space-size=2048独立于父进程启动Child 2即可。
  • 当前的产品设置正在运行节点v8.9.1,我已经用v11.9.0进行了测试,并且结果相同。
  • 不是真的在寻找关于节点进程应使用多少内存的判断。

0 个答案:

没有答案