当我试图在资源受限的windows环境中运行nodejs工作线程时,我会收到错误Error [ERR_WORKER_OUT_OF_MEMORY]: worker terminated due to reaching memory limit。
谢谢。
发布于 2020-04-16 17:27:31
请参见可以传递给辅助构造函数的resourceLimits选项。
引用医生的话:
resourceLimits
<Object>新JS引擎实例的一组可选资源限制。达到这些限制将导致工人实例的终止。这些限制只影响JS引擎,不影响外部数据,包括不影响ArrayBuffers。即使设置了这些限制,如果进程遇到全局内存不足的情况,进程仍可能中止。 maxOldGenerationSizeMb主堆的最大大小(以MB表示)。 maxYoungGenerationSizeMb最近创建的对象的堆空间的最大大小。 codeRangeSizeMb用于生成代码的预分配内存范围的大小.
我还没有看到任何关于nodejs在不填写这些默认值时如何选择它们的文章。但是指定它们会给你一些控制权。
我要补充的是,nodejs在试图适应资源受限的目标时,并不是一个特别节省内存的环境。它使内存中可能不像它编译的所有原始源代码那样被真正需要的东西留在内存中。它的GC特性给了它比手动控制的分配更广泛的内存使用范围。它还特别不适合一次读取大量数据集,并将其解析为大量的小字符串,因为这可能导致高峰值内存使用,尽管当事情平静下来时,很多数据会被垃圾收集。
另一个例子是,您可以读取/解析一个10 up的JSON文件,并将该文件占用10倍的内存存储为Javascript数据。这并不意味着对nodejs的起诉(我是一个狂热的粉丝),但是如果您想要在内存中容纳更少的内存,那么您必须更加小心地使用这个工具。Worker是一堆额外的内存开销(它有自己的堆、自己的编译代码等等),这比C/C++之类的东西要多得多。
https://stackoverflow.com/questions/61256179
复制相似问题