Stuła v8 jest faktycznie podzielona na regiony lub spacje: new_space, old_space, code_space, map_space i large_object_space. Pierwsze dwa w przybliżeniu odpowiadają przedszkolom i kupionej kupie obiektu, choć teoretycznie obiekty mogą siedzieć w dowolnym z pięciu pól.
Bardziej dokładnym środkiem byłoby użycie space_size i space_used_size z old_space.
var space = v8.getHeapSpaceStatistics();
var old_space_total = space[1].space_size;
var old_space_used = space[1].space_used_size;
var usage = 100/old_space_total * old_space_used;
if (usage > 90) {
console.log(`V8 heap usage close to the limit (${usage.toFixed()}%)`);
} else if (usage > 95) {
console.log(`V8 heap usage very close to the limit (${usage.toFixed()}%)`);
}
Statystyki tuż przed wyczerpaniem pamięci:
#node --max_old_space_size=200 heap.js
...
{ total_heap_size: 243306496,
total_heap_size_executable: 5242880,
total_physical_size: 243306496,
total_available_size: 19149632,
used_heap_size: 215801616,
heap_size_limit: 243269632 }
[ { space_name: 'new_space',
space_size: 33554432,
space_used_size: 16464888,
space_available_size: 41992,
physical_space_size: 33554432 },
{ space_name: 'old_space',
space_size: 205475840,
space_used_size: 197215464,
space_available_size: 18462512,
physical_space_size: 205475840 },
{ space_name: 'code_space',
space_size: 2097152,
space_used_size: 680416,
space_available_size: 617024,
physical_space_size: 2097152 },
{ space_name: 'map_space',
space_size: 2179072,
space_used_size: 1452528,
space_available_size: 18800,
physical_space_size: 2179072 },
{ space_name: 'large_object_space',
space_size: 0,
space_used_size: 0,
space_available_size: 0,
physical_space_size: 0 } ]
V8 heap usage close to the limit (96%)
...
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
Jak widać, total_heap_size: 243306496 jest faktycznie podsumowanie nowej przestrzeni (33554432), starej przestrzeni (205475840), kod (2097152), map (2179072), duży obiekt (0).
I jak widać, wszystkie inne przestrzenie są zdrowe, podczas gdy stara przestrzeń zbliża się do wyczerpania, a rzeczywiste zmęczenie pochodzi stąd.
Mam nadzieję, że to pomoże.