v8: integrate node-heapdump into core · nodejs/node@9092e12 (original) (raw)

`@@ -87,6 +87,24 @@ The value returned is an array of objects containing the following properties:

`

87

87

`]

`

88

88

```` ```


`89`

`89`

``

``

`90`

`+

## v8.getHeapSnapshot()

`

``

`91`

`+

<!-- YAML

`

``

`92`

`+

added: REPLACEME

`

``

`93`

`+

-->

`

``

`94`

`+`

``

`95`

`+

* Returns: {stream.Readable} A Readable Stream containing the V8 heap snapshot

`

``

`96`

`+`

``

`97`

`+

Generates a snapshot of the current V8 heap and returns a Readable

`

``

`98`

`+

Stream that may be used to read the JSON serialized representation.

`

``

`99`

`+

This JSON stream format is intended to be used with tools such as

`

``

`100`

`+

Chrome DevTools. The JSON schema is undocumented and specific to the

`

``

`101`

`+

V8 engine, and may change from one version of V8 to the next.

`

``

`102`

`+`

``

`103`

```` +

```js

``

104

`+

const stream = v8.getHeapSnapshot();

`

``

105

`+

stream.pipe(process.stdout);

`

``

106


```

``

107

+

90

108

`## v8.getHeapStatistics()

`

91

109

`<!-- YAML

`

92

110

`added: v1.0.0

`

`@@ -159,6 +177,58 @@ v8.setFlagsFromString('--trace_gc');

`

159

177

`setTimeout(() => { v8.setFlagsFromString('--notrace_gc'); }, 60e3);

`

160

178

```` ```


`161`

`179`

``

``

`180`

`+

## v8.writeHeapSnapshot([filename])

`

``

`181`

`+

<!-- YAML

`

``

`182`

`+

added: REPLACEME

`

``

`183`

`+

-->

`

``

`184`

`+`

``

`185`

`` +

* `filename` {string} The file path where the V8 heap snapshot is to be

``

``

`186`

`+

saved. If not specified, a file name with the pattern

`

``

`187`

`` +

`'Heap-${yyyymmdd}-${hhmmss}-${pid}-${thread_id}.heapsnapshot'` will be

``

``

`188`

`` +

generated, where `{pid}` will be the PID of the Node.js process,

``

``

`189`

`` +

`{thread_id}` will be `0` when `writeHeapSnapshot()` is called from

``

``

`190`

`+

the main Node.js thread or the id of a worker thread.

`

``

`191`

`+

* Returns: {string} The filename where the snapshot was saved.

`

``

`192`

`+`

``

`193`

`+

Generates a snapshot of the current V8 heap and writes it to a JSON

`

``

`194`

`+

file. This file is intended to be used with tools such as Chrome

`

``

`195`

`+

DevTools. The JSON schema is undocumented and specific to the V8

`

``

`196`

`+

engine, and may change from one version of V8 to the next.

`

``

`197`

`+`

``

`198`

`+

A heap snapshot is specific to a single V8 isolate. When using

`

``

`199`

`+

[Worker Threads][], a heap snapshot generated from the main thread will

`

``

`200`

`+

not contain any information about the workers, and vice versa.

`

``

`201`

`+`

``

`202`

```` +

```js

``

203

`+

const { writeHeapSnapshot } = require('v8');

`

``

204

`+

const {

`

``

205

`+

Worker,

`

``

206

`+

isMainThread,

`

``

207

`+

parentPort

`

``

208

`+

} = require('worker_threads');

`

``

209

+

``

210

`+

if (isMainThread) {

`

``

211

`+

const worker = new Worker(__filename);

`

``

212

+

``

213

`+

worker.once('message', (filename) => {

`

``

214

`` +

console.log(worker heapdump: ${filename});

``

``

215

`+

// Now get a heapdump for the main thread.

`

``

216

`` +

console.log(main thread heapdump: ${writeHeapSnapshot()});

``

``

217

`+

});

`

``

218

+

``

219

`+

// Tell the worker to create a heapdump.

`

``

220

`+

worker.postMessage('heapdump');

`

``

221

`+

} else {

`

``

222

`+

parentPort.once('message', (message) => {

`

``

223

`+

if (message === 'heapdump') {

`

``

224

`+

// Generate a heapdump for the worker

`

``

225

`+

// and return the filename to the parent.

`

``

226

`+

parentPort.postMessage(writeHeapSnapshot());

`

``

227

`+

}

`

``

228

`+

});

`

``

229

`+

}

`

``

230


```

``

231

+

162

232

`## Serialization API

`

163

233

``

164

234

`> Stability: 1 - Experimental

`

`` @@ -417,4 +487,5 @@ A subclass of [Deserializer][] corresponding to the format written by

``

417

487

`` [vm.Script]: vm.html#vm_constructor_new_vm_script_code_options

``

418

488

`[HTML structured clone algorithm]: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm

`

419

489

`[V8]: https://developers.google.com/v8/

`

``

490

`+

`

420

491

`[here]: https://github.com/thlorenz/v8-flags/blob/master/flags-0.11.md

`