Node.js 节点工作线程内存不足时出错

Node.js 节点工作线程内存不足时出错,node.js,worker-thread,Node.js,Worker Thread,当我尝试在资源受限的windows环境中运行nodejs工作线程时,我收到错误错误[ERR\u WORKER\u OUT\u OF\u MEMORY]:工作线程由于达到内存限制而终止 默认情况下,每个线程的内存限制是多少 可以增加吗 谢谢。查看可以传递给工人构造函数的选项 引用文件: 资源限制 新JS引擎实例的一组可选资源限制。 达到这些限制将导致工作实例终止。 这些限制只影响JS引擎,没有外部数据, 不包括阵列缓冲器。即使设置了这些限制,流程也会 如果遇到全局内存不足的情况,可能仍会中止 ma

当我尝试在资源受限的windows环境中运行nodejs工作线程时,我收到错误
错误[ERR\u WORKER\u OUT\u OF\u MEMORY]:工作线程由于达到内存限制而终止

  • 默认情况下,每个线程的内存限制是多少
  • 可以增加吗
  • 谢谢。

    查看可以传递给工人构造函数的选项

    引用文件:

    资源限制

    新JS引擎实例的一组可选资源限制。 达到这些限制将导致工作实例终止。 这些限制只影响JS引擎,没有外部数据, 不包括阵列缓冲器。即使设置了这些限制,流程也会 如果遇到全局内存不足的情况,可能仍会中止

    maxOldGenerationSizeMb中主堆的最大大小 MB

    maxYoungGenerationSizeMb堆空间的最大大小 用于最近创建的对象

    codeRangeSizeMb的大小为 用于生成代码的预分配内存范围

    我还没有看到任何关于nodejs在您不填写默认值时如何选择这些默认值的文章。但是指定它们会给您一些控制

    我要补充的是,当试图适应资源受限的目标时,nodejs并不是一个特别高效的内存环境。它在内存中保留可能并不需要的东西,就像它编译的所有原始源代码一样。它的GC特性使它的内存使用范围比手动控制的分配更广。它还特别不擅长一次读取大量数据集并将其解析为大量小字符串,因为这会导致内存使用高峰,即使当事情平静下来时,大量数据会被垃圾收集


    另一个例子是,您可以读取/解析一个10MB的JSON文件,并将其作为Javascript数据存储,占用的内存是该文件的10倍。一般来说,这并不是对nodejs的控诉(我是一个超级粉丝),但是如果你想在较小的内存中使用这个工具,你必须更加小心。工作线程是一堆额外的内存开销(它自己的堆、自己编译的代码等等),比C/C++之类的东西要多得多。

    谢谢。设置资源限制有助于解决此问题。