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());
}
});
}
相關用法
- Node.js v8.getHeapSpaceStatistics()用法及代碼示例
- Node.js v8.deserializer.readRawBytes()用法及代碼示例
- Node.js v8.deserializer.readUint32()用法及代碼示例
- Node.js v8.serializer.writeRawBytes()用法及代碼示例
- Node.js v8.Deserializer.readUint32()用法及代碼示例
- Node.js v8.getHeapCodeStatistics()用法及代碼示例
- Node.js v8.serializer.releaseBuffer()用法及代碼示例
- Node.js v8.Serializer.writeUint32()用法及代碼示例
- Node.js v8.getHeapStatistics()用法及代碼示例
- Node.js v8.serializer.writeUint32()用法及代碼示例
- Node.js v8.setFlagsFromString(flags)用法及代碼示例
- Node.js v8.Serializer.releaseBuffer()用法及代碼示例
- Node.js v8.Serializer.writeUint64()用法及代碼示例
- Node.js v8.serializer.writeUint64()用法及代碼示例
- Node.js v8.cachedDataVersionTag()用法及代碼示例
- Node.js v8.getHeapSnapshot()用法及代碼示例
- Node.js v8.serializer.writeDouble()用法及代碼示例
- Node.js v8.deserializer.readValue()用法及代碼示例
- Node.js v8.Deserializer.readDouble()用法及代碼示例
- Node.js v8.deserializer.readUint64()用法及代碼示例
- Node.js v8.Deserializer.readUint64()用法及代碼示例
- Node.js v8.Serializer.writeRawBytes()用法及代碼示例
- Node.js v8.Deserializer.readValue()用法及代碼示例
- Node.js v8.Deserializer.readHeader()用法及代碼示例
- Node.js v8.deserializer.readHeader()用法及代碼示例
注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 v8.writeHeapSnapshot([filename])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。