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])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。