當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。