mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
v8: export more fields in getHeapStatistics
export total_global_handles_size, used_global_handles_size, external_memory in getHeapStatistics PR-URL: https://github.com/nodejs/node/pull/42784 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Darshan Sen <raisinten@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
c4781ea69c
commit
9cd2c277d8
@ -180,6 +180,9 @@ Returns an object with the following properties:
|
|||||||
* `does_zap_garbage` {number}
|
* `does_zap_garbage` {number}
|
||||||
* `number_of_native_contexts` {number}
|
* `number_of_native_contexts` {number}
|
||||||
* `number_of_detached_contexts` {number}
|
* `number_of_detached_contexts` {number}
|
||||||
|
* `total_global_handles_size` {number}
|
||||||
|
* `used_global_handles_size` {number}
|
||||||
|
* `external_memory` {number}
|
||||||
|
|
||||||
`does_zap_garbage` is a 0/1 boolean, which signifies whether the
|
`does_zap_garbage` is a 0/1 boolean, which signifies whether the
|
||||||
`--zap_code_space` option is enabled or not. This makes V8 overwrite heap
|
`--zap_code_space` option is enabled or not. This makes V8 overwrite heap
|
||||||
@ -195,6 +198,15 @@ a memory leak.
|
|||||||
of contexts that were detached and not yet garbage collected. This number
|
of contexts that were detached and not yet garbage collected. This number
|
||||||
being non-zero indicates a potential memory leak.
|
being non-zero indicates a potential memory leak.
|
||||||
|
|
||||||
|
`total_global_handles_size` The value of total\_global\_handles\_size is the
|
||||||
|
total memory size of V8 global handles.
|
||||||
|
|
||||||
|
`used_global_handles_size` The value of used\_global\_handles\_size is the
|
||||||
|
used memory size of V8 global handles.
|
||||||
|
|
||||||
|
`external_memory` The value of external\_memory is the memory size of array
|
||||||
|
buffers and external strings.
|
||||||
|
|
||||||
<!-- eslint-skip -->
|
<!-- eslint-skip -->
|
||||||
|
|
||||||
```js
|
```js
|
||||||
@ -209,7 +221,10 @@ being non-zero indicates a potential memory leak.
|
|||||||
peak_malloced_memory: 1127496,
|
peak_malloced_memory: 1127496,
|
||||||
does_zap_garbage: 0,
|
does_zap_garbage: 0,
|
||||||
number_of_native_contexts: 1,
|
number_of_native_contexts: 1,
|
||||||
number_of_detached_contexts: 0
|
number_of_detached_contexts: 0,
|
||||||
|
total_global_handles_size: 8192,
|
||||||
|
used_global_handles_size: 3296,
|
||||||
|
external_memory: 318824
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -107,6 +107,9 @@ const {
|
|||||||
kPeakMallocedMemoryIndex,
|
kPeakMallocedMemoryIndex,
|
||||||
kNumberOfNativeContextsIndex,
|
kNumberOfNativeContextsIndex,
|
||||||
kNumberOfDetachedContextsIndex,
|
kNumberOfDetachedContextsIndex,
|
||||||
|
kTotalGlobalHandlesSizeIndex,
|
||||||
|
kUsedGlobalHandlesSizeIndex,
|
||||||
|
kExternalMemoryIndex,
|
||||||
|
|
||||||
// Properties for heap spaces statistics buffer extraction.
|
// Properties for heap spaces statistics buffer extraction.
|
||||||
kHeapSpaces,
|
kHeapSpaces,
|
||||||
@ -165,7 +168,10 @@ function getHeapStatistics() {
|
|||||||
peak_malloced_memory: buffer[kPeakMallocedMemoryIndex],
|
peak_malloced_memory: buffer[kPeakMallocedMemoryIndex],
|
||||||
does_zap_garbage: buffer[kDoesZapGarbageIndex],
|
does_zap_garbage: buffer[kDoesZapGarbageIndex],
|
||||||
number_of_native_contexts: buffer[kNumberOfNativeContextsIndex],
|
number_of_native_contexts: buffer[kNumberOfNativeContextsIndex],
|
||||||
number_of_detached_contexts: buffer[kNumberOfDetachedContextsIndex]
|
number_of_detached_contexts: buffer[kNumberOfDetachedContextsIndex],
|
||||||
|
total_global_handles_size: buffer[kTotalGlobalHandlesSizeIndex],
|
||||||
|
used_global_handles_size: buffer[kUsedGlobalHandlesSizeIndex],
|
||||||
|
external_memory: buffer[kExternalMemoryIndex]
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,19 +47,21 @@ using v8::Uint32;
|
|||||||
using v8::V8;
|
using v8::V8;
|
||||||
using v8::Value;
|
using v8::Value;
|
||||||
|
|
||||||
|
#define HEAP_STATISTICS_PROPERTIES(V) \
|
||||||
#define HEAP_STATISTICS_PROPERTIES(V) \
|
V(0, total_heap_size, kTotalHeapSizeIndex) \
|
||||||
V(0, total_heap_size, kTotalHeapSizeIndex) \
|
V(1, total_heap_size_executable, kTotalHeapSizeExecutableIndex) \
|
||||||
V(1, total_heap_size_executable, kTotalHeapSizeExecutableIndex) \
|
V(2, total_physical_size, kTotalPhysicalSizeIndex) \
|
||||||
V(2, total_physical_size, kTotalPhysicalSizeIndex) \
|
V(3, total_available_size, kTotalAvailableSize) \
|
||||||
V(3, total_available_size, kTotalAvailableSize) \
|
V(4, used_heap_size, kUsedHeapSizeIndex) \
|
||||||
V(4, used_heap_size, kUsedHeapSizeIndex) \
|
V(5, heap_size_limit, kHeapSizeLimitIndex) \
|
||||||
V(5, heap_size_limit, kHeapSizeLimitIndex) \
|
V(6, malloced_memory, kMallocedMemoryIndex) \
|
||||||
V(6, malloced_memory, kMallocedMemoryIndex) \
|
V(7, peak_malloced_memory, kPeakMallocedMemoryIndex) \
|
||||||
V(7, peak_malloced_memory, kPeakMallocedMemoryIndex) \
|
V(8, does_zap_garbage, kDoesZapGarbageIndex) \
|
||||||
V(8, does_zap_garbage, kDoesZapGarbageIndex) \
|
V(9, number_of_native_contexts, kNumberOfNativeContextsIndex) \
|
||||||
V(9, number_of_native_contexts, kNumberOfNativeContextsIndex) \
|
V(10, number_of_detached_contexts, kNumberOfDetachedContextsIndex) \
|
||||||
V(10, number_of_detached_contexts, kNumberOfDetachedContextsIndex)
|
V(11, total_global_handles_size, kTotalGlobalHandlesSizeIndex) \
|
||||||
|
V(12, used_global_handles_size, kUsedGlobalHandlesSizeIndex) \
|
||||||
|
V(13, external_memory, kExternalMemoryIndex)
|
||||||
|
|
||||||
#define V(a, b, c) +1
|
#define V(a, b, c) +1
|
||||||
static constexpr size_t kHeapStatisticsPropertiesCount =
|
static constexpr size_t kHeapStatisticsPropertiesCount =
|
||||||
|
@ -6,15 +6,18 @@ const v8 = require('v8');
|
|||||||
const s = v8.getHeapStatistics();
|
const s = v8.getHeapStatistics();
|
||||||
const keys = [
|
const keys = [
|
||||||
'does_zap_garbage',
|
'does_zap_garbage',
|
||||||
|
'external_memory',
|
||||||
'heap_size_limit',
|
'heap_size_limit',
|
||||||
'malloced_memory',
|
'malloced_memory',
|
||||||
'number_of_detached_contexts',
|
'number_of_detached_contexts',
|
||||||
'number_of_native_contexts',
|
'number_of_native_contexts',
|
||||||
'peak_malloced_memory',
|
'peak_malloced_memory',
|
||||||
'total_available_size',
|
'total_available_size',
|
||||||
|
'total_global_handles_size',
|
||||||
'total_heap_size',
|
'total_heap_size',
|
||||||
'total_heap_size_executable',
|
'total_heap_size_executable',
|
||||||
'total_physical_size',
|
'total_physical_size',
|
||||||
|
'used_global_handles_size',
|
||||||
'used_heap_size'];
|
'used_heap_size'];
|
||||||
assert.deepStrictEqual(Object.keys(s).sort(), keys);
|
assert.deepStrictEqual(Object.keys(s).sort(), keys);
|
||||||
keys.forEach(function(key) {
|
keys.forEach(function(key) {
|
||||||
|
Loading…
Reference in New Issue
Block a user