我正在尝试调试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即可。