当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Node.js v8.writeHeapSnapshot([filename])用法及代码示例


v8.writeHeapSnapshot([filename])

历史
版本变化
v18.0.0

如果无法写入文件,现在将引发异常。

v18.0.0

使返回的错误代码在所有平台上保持一致。

v11.13.0

添加于:v11.13.0


参数
  • filename <string> V8堆快照要保存的文件路径。如果未指定,将生成带有模式 'Heap-${yyyymmdd}-${hhmmss}-${pid}-${thread_id}.heapsnapshot' 的文件名,其中 {pid} 将是 Node.js 进程的 PID,当从主节点调用 writeHeapSnapshot() 时,{thread_id} 将是 0 .js 线程或工作线程的 id。
  • 返回: <string> 保存快照的文件名。

生成当前 V8 堆的快照并将其写入 JSON 文件。该文件旨在与 Chrome DevTools 等工具一起使用。 JSON 模式未记录且特定于 V8 引擎,并且可能会从 V8 的一个版本更改为下一个版本。

堆快照特定于单个 V8 隔离。使用 worker threads 时,从主线程生成的堆快照将不包含有关工作人员的任何信息,反之亦然。

创建堆快照需要的内存大约是创建快照时堆大小的两倍。这会导致 OOM 杀手终止进程的风险。

生成快照是一个同步操作,它根据堆大小阻塞事件循环一段时间。

const { writeHeapSnapshot } = require('node:v8');
const {
  Worker,
  isMainThread,
  parentPort
} = require('node:worker_threads');

if (isMainThread) {
  const worker = new Worker(__filename);

  worker.once('message', (filename) => {
    console.log(`worker heapdump: ${filename}`);
    // Now get a heapdump for the main thread.
    console.log(`main thread heapdump: ${writeHeapSnapshot()}`);
  });

  // Tell the worker to create a heapdump.
  worker.postMessage('heapdump');
} else {
  parentPort.once('message', (message) => {
    if (message === 'heapdump') {
      // Generate a heapdump for the worker
      // and return the filename to the parent.
      parentPort.postMessage(writeHeapSnapshot());
    }
  });
}

相关用法


注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 v8.writeHeapSnapshot([filename])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。