Skip to content

Commit 201f3d7

Browse files
theanarkhdanielleadams
authored andcommitted
report: add more heap infos in process report
PR-URL: #43116 Reviewed-By: Zeyu "Alex" Yang <himself65@outlook.com> Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
1 parent 28c034d commit 201f3d7

File tree

3 files changed

+55
-13
lines changed

3 files changed

+55
-13
lines changed

doc/api/report.md

+14-5
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,20 @@ is provided below for reference.
131131
}
132132
],
133133
"javascriptHeap": {
134-
"totalMemory": 6127616,
135-
"totalCommittedMemory": 4357352,
136-
"usedMemory": 3221136,
137-
"availableMemory": 1521370240,
138-
"memoryLimit": 1526909922,
134+
"totalMemory": 5660672,
135+
"executableMemory": 524288,
136+
"totalCommittedMemory": 5488640,
137+
"availableMemory": 4341379928,
138+
"totalGlobalHandlesMemory": 8192,
139+
"usedGlobalHandlesMemory": 3136,
140+
"usedMemory": 4816432,
141+
"memoryLimit": 4345298944,
142+
"mallocedMemory": 254128,
143+
"externalMemory": 315644,
144+
"peakMallocedMemory": 98752,
145+
"nativeContextCount": 1,
146+
"detachedContextCount": 0,
147+
"doesZapGarbage": 0,
139148
"heapSpaces": {
140149
"read_only_space": {
141150
"memorySize": 524288,

src/node_report.cc

+16-1
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

+25-7
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)