Skip to content

Commit 90b7013

Browse files
committed
report: add more heap infos in process report
1 parent fbe1478 commit 90b7013

File tree

3 files changed

+57
-14
lines changed

3 files changed

+57
-14
lines changed

doc/api/report.md

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ triggering programmatically through API calls.
2020
A complete example report that was generated on an uncaught exception
2121
is provided below for reference.
2222

23-
```json
23+
```js
2424
{
2525
"header": {
2626
"reportVersion": 1,
@@ -130,12 +130,22 @@ is provided below for reference.
130130
"symbol": " [./node]"
131131
}
132132
],
133+
// see v8.getHeapStatistics()
133134
"javascriptHeap": {
134-
"totalMemory": 6127616,
135-
"totalCommittedMemory": 4357352,
136-
"usedMemory": 3221136,
137-
"availableMemory": 1521370240,
138-
"memoryLimit": 1526909922,
135+
"totalMemory": 5660672,
136+
"executableMemory": 524288,
137+
"totalCommittedMemory": 5488640,
138+
"availableMemory": 4341379928,
139+
"totalGlobalHandlesMemory": 8192,
140+
"usedGlobalHandlesMemory": 3136,
141+
"usedMemory": 4816432,
142+
"memoryLimit": 4345298944,
143+
"mallocedMemory": 254128,
144+
"externalMemory": 315644,
145+
"peakMallocedMemory": 98752,
146+
"nativeContextCount": 1,
147+
"detachedContextCount": 0,
148+
"doesZapGarbage": 0,
139149
"heapSpaces": {
140150
"read_only_space": {
141151
"memorySize": 524288,

src/node_report.cc

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,12 +608,27 @@ static void PrintGCStatistics(JSONWriter* writer, Isolate* isolate) {
608608

609609
writer->json_objectstart("javascriptHeap");
610610
writer->json_keyvalue("totalMemory", v8_heap_stats.total_heap_size());
611+
writer->json_keyvalue("executableMemory",
612+
v8_heap_stats.total_heap_size_executable());
611613
writer->json_keyvalue("totalCommittedMemory",
612614
v8_heap_stats.total_physical_size());
613-
writer->json_keyvalue("usedMemory", v8_heap_stats.used_heap_size());
614615
writer->json_keyvalue("availableMemory",
615616
v8_heap_stats.total_available_size());
617+
writer->json_keyvalue("totalGlobalHandlesMemory",
618+
v8_heap_stats.total_global_handles_size());
619+
writer->json_keyvalue("usedGlobalHandlesMemory",
620+
v8_heap_stats.used_global_handles_size());
621+
writer->json_keyvalue("usedMemory", v8_heap_stats.used_heap_size());
616622
writer->json_keyvalue("memoryLimit", v8_heap_stats.heap_size_limit());
623+
writer->json_keyvalue("mallocedMemory", v8_heap_stats.malloced_memory());
624+
writer->json_keyvalue("externalMemory", v8_heap_stats.external_memory());
625+
writer->json_keyvalue("peakMallocedMemory",
626+
v8_heap_stats.peak_malloced_memory());
627+
writer->json_keyvalue("nativeContextCount",
628+
v8_heap_stats.number_of_native_contexts());
629+
writer->json_keyvalue("detachedContextCount",
630+
v8_heap_stats.number_of_detached_contexts());
631+
writer->json_keyvalue("doesZapGarbage", v8_heap_stats.does_zap_garbage());
617632

618633
writer->json_objectstart("heapSpaces");
619634
// Loop through heap spaces

test/common/report.js

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -193,14 +193,32 @@ function _validateContent(report, fields = []) {
193193

194194
// Verify the format of the javascriptHeap section.
195195
const heap = report.javascriptHeap;
196-
const jsHeapFields = ['totalMemory', 'totalCommittedMemory', 'usedMemory',
197-
'availableMemory', 'memoryLimit', 'heapSpaces'];
196+
// See `PrintGCStatistics` in node_report.cc
197+
const jsHeapFields = [
198+
'totalMemory',
199+
'executableMemory',
200+
'totalCommittedMemory',
201+
'availableMemory',
202+
'totalGlobalHandlesMemory',
203+
'usedGlobalHandlesMemory',
204+
'usedMemory',
205+
'memoryLimit',
206+
'mallocedMemory',
207+
'externalMemory',
208+
'peakMallocedMemory',
209+
'nativeContextCount',
210+
'detachedContextCount',
211+
'doesZapGarbage',
212+
'heapSpaces',
213+
];
198214
checkForUnknownFields(heap, jsHeapFields);
199-
assert(Number.isSafeInteger(heap.totalMemory));
200-
assert(Number.isSafeInteger(heap.totalCommittedMemory));
201-
assert(Number.isSafeInteger(heap.usedMemory));
202-
assert(Number.isSafeInteger(heap.availableMemory));
203-
assert(Number.isSafeInteger(heap.memoryLimit));
215+
// Do not check `heapSpaces` here
216+
for (let i = 0; i < jsHeapFields.length - 1; i++) {
217+
assert(
218+
Number.isSafeInteger(heap[jsHeapFields[i]]),
219+
`heap.${jsHeapFields[i]} is not a safe integer`
220+
);
221+
}
204222
assert(typeof heap.heapSpaces === 'object' && heap.heapSpaces !== null);
205223
const heapSpaceFields = ['memorySize', 'committedMemory', 'capacity',
206224
'used', 'available'];

0 commit comments

Comments
 (0)