1

我使用worker_threads 创建了一个worker。像这样:

const WorkerThreads = require('worker_threads');
const worker = new WorkerThreads.Worker('./path/to/a.js');

if (countMemory(worker) > 100 * 1024 * 1024) {
    worker.terminate();
}

function countMemory(worker) {
    // some code I don't know
}

而且我知道./path/to/a.jsWorker 有一点内存泄漏,所以当它泄漏很多时我必须破坏 Worker。如何获取 Worker 使用了多少内存?

4

2 回答 2

0

查看resourceLimits可以传递给 Worker 构造函数的选项。应该比在您的用例中手动检查内存使用情况更有用。

https://nodejs.org/api/worker_threads.html#worker_threads_new_worker_filename_options

资源限制 新 JS 引擎实例的一组可选资源限制。达到这些限制将导致 Worker 实例终止。这些限制只影响 JS 引擎,不影响外部数据,包括不包含 ArrayBuffers。即使设置了这些限制,如果遇到全局内存不足的情况,进程仍可能中止。

  • maxOldGenerationSizeMb 主堆的最大大小(以 MB 为单位)。
  • maxYoungGenerationSizeMb 最近创建的对象的最大堆空间大小。
  • codeRangeSizeMb 用于生成代码的预分配内存范围的大小。
  • stackSizeMb 线程的默认最大堆栈大小。较小的值可能会导致无法使用的 Worker 实例。默认值:4。

Worker 还暴露了getHeapSnapshot()方法。由于 Worker 有自己的 v8 实例正在运行,因此您可以使用所有v8 API 来获取更多详细信息。

于 2020-09-14T16:03:10.297 回答
0

您可以使用process.memoryUsage从所有线程中获取信息。检查这个问题。我认为您可以对 worker_threads 使用相同的方法

于 2020-09-14T15:26:45.640 回答