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

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

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

    1. const { writeHeapSnapshot } = require('v8');
    2. const {
    3. Worker,
    4. isMainThread,
    5. parentPort
    6. } = require('worker_threads');
    7. if (isMainThread) {
    8. const worker = new Worker(__filename);
    9. worker.once('message', (filename) => {
    10. console.log(`工作线程的堆转储: ${filename}`);
    11. // 获取主线程的堆转储。
    12. console.log(`主线程的堆转储: ${writeHeapSnapshot()}`);
    13. });
    14. // 通知工作线程创建一个堆转储。
    15. worker.postMessage('heapdump');
    16. } else {
    17. parentPort.once('message', (message) => {
    18. if (message === 'heapdump') {
    19. // 为工作线程生成一个堆转储,并返回文件名到父线程。
    20. parentPort.postMessage(writeHeapSnapshot());
    21. }
    22. });
    23. }