节点的 max_old_space_size 会影响子进程的内存限制吗?
Does node's max_old_space_size affect the child processs's memory limits?
我正在使用节点来管理服务之间的通信层和一个长 运行ning java 进程。这个 java 进程是一个 运行 使用 ChildProcess.spawn()
的 jar
我正在设置 stdio、close、stderr 侦听器来监视子进程的进度并在整个过程中保存输出。我希望子进程 运行 在它自己的内存中 space,有自己的内存限制(因为它是一个独立的进程)。
但是,通过测试我确定当我增加节点进程的 max_old_space_size
时,进程 运行 显着延长,然后才会出现内存问题。似乎通过执行 java 进程分配的内存被计入父进程的最大分配。是这样吗?
答案是否定的。如果您通过 fork()
生成节点进程,则唯一会传递这些内存限制,这会将其 execArgv
选项默认为 process.execArgv
(其中包括当前进程的 V8 标志),或者如果您以显式限制内存使用的方式生成子进程(例如 Java 自己的资源限制标志或通过生成具有受限资源的实际子进程的命令)。 Node 不会代表您隐式执行 ulimit
或任何其他此类命令。
我正在使用节点来管理服务之间的通信层和一个长 运行ning java 进程。这个 java 进程是一个 运行 使用 ChildProcess.spawn()
我正在设置 stdio、close、stderr 侦听器来监视子进程的进度并在整个过程中保存输出。我希望子进程 运行 在它自己的内存中 space,有自己的内存限制(因为它是一个独立的进程)。
但是,通过测试我确定当我增加节点进程的 max_old_space_size
时,进程 运行 显着延长,然后才会出现内存问题。似乎通过执行 java 进程分配的内存被计入父进程的最大分配。是这样吗?
答案是否定的。如果您通过 fork()
生成节点进程,则唯一会传递这些内存限制,这会将其 execArgv
选项默认为 process.execArgv
(其中包括当前进程的 V8 标志),或者如果您以显式限制内存使用的方式生成子进程(例如 Java 自己的资源限制标志或通过生成具有受限资源的实际子进程的命令)。 Node 不会代表您隐式执行 ulimit
或任何其他此类命令。