Aller au contenu principal

Investiguer les fuites de mémoire

Si vous enquêtez sur une fuite de mémoire et vous demandez pourquoi un objet n'est pas collecté par le ramasse-miettes, vous pouvez utiliser %DebugTrackRetainingPath(object) pour imprimer le chemin de rétention réel de l'objet à chaque GC.

Cela nécessite les options d'exécution --allow-natives-syntax --track-retaining-path et fonctionne à la fois en mode release et debug. Plus d'informations dans la description du CL.

Considérez le script suivant test.js :

function foo() {
const x = { bar: 'bar' };
%DebugTrackRetainingPath(x);
return () => { return x; }
}
const closure = foo();
gc();

Exemple (utilisez le mode debug ou v8_enable_object_print = true pour un affichage beaucoup plus détaillé) :

$ out/x64.release/d8 --allow-natives-syntax --track-retaining-path --expose-gc test.js
#################################################
Chemin de rétention pour 0x245c59f0c1a1:

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Distance de la racine 6: 0x245c59f0c1a1 <Object map = 0x2d919f0d729>

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Distance de la racine 5: 0x245c59f0c169 <FixedArray[5]>

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Distance de la racine 4: 0x245c59f0c219 <JSFunction (sfi = 0x1fbb02e2d7f1)>

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Distance de la racine 3: 0x1fbb02e2d679 <FixedArray[5]>

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Distance de la racine 2: 0x245c59f0c139 <FixedArray[4]>

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Distance de la racine 1: 0x1fbb02e03d91 <FixedArray[279]>

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Racine: (Isolate)
-------------------------------------------------

Support du débogueur

Pendant une session de débogueur (par exemple gdb/lldb), et en supposant que vous avez passé les options ci-dessus au processus (c'est-à-dire --allow-natives-syntax --track-retaining-path), vous pouvez peut-être print isolate->heap()->PrintRetainingPath(HeapObject*) sur un objet d'intérêt.