He ejecutado Devel::Leak
en mi programa y no entiendo la salida que me está dando.¿Cómo interpreto la salida de Devel :: Leak
Para empezar, veo que está imprimiendo una lista de punteros. ¿Puedo obtener esa lista en una matriz? Luego puedo usar FindRef para ver de dónde viene.
Por ejemplo:
new 0xaebc28 : SV = PVGV(0x30e7e48) at 0xaebc28
REFCNT = 1
FLAGS = (GMG,SMG)
IV = 0
NV = 0
PV = 0
MAGIC = 0x2db7dc0
MG_VIRTUAL = &PL_vtbl_glob
MG_TYPE = PERL_MAGIC_glob(*)
MG_OBJ = 0xaebc28
NAME = "SUPER::"
NAMELEN = 7
GvSTASH = 0x76b228 "IO::File"
GP = 0x314b170
SV = 0x30283c8
REFCNT = 1
IO = 0x0
FORM = 0x0
AV = 0x0
HV = 0x301fdb8
CV = 0x0
CVGEN = 0x0
GPFLAGS = 0x0
LINE = 161
FILE = "/mypath/perl_install/perl/lib/5.8.9/x86_64-linux/IO/File.pm"
FLAGS = 0x0
EGV = 0xaebc28 "SUPER::"
o un montón de entradas más pequeños:
new 0x161c268 : SV = RV(0x3029b40) at 0x161c268
REFCNT = 1
FLAGS = (ROK)
RV = 0x161c218
¿Qué hago con esto? Obtengo las cosas de la estructura Perl (magic, iv, pv, ..), pero ¿cómo puedo ir desde estas líneas hasta saber dónde está ocurriendo mi fuga?
http://blog.woobling.org/2009/05/become-hero-plumber.html; ver también http://stackoverflow.com/questions/1359771/perl-memory-usage-profiling-and-leak-detection, http://stackoverflow.com/questions/2223721/common-perl-memory-reference-leak -patterns, http://stackoverflow.com/questions/1663498/finding-a-perl-memory-leak, http://stackoverflow.com/questions/295385/are-herehere-any-tools-for-finding -memory-leaks-in-my-perl-program – Ether
@Ether Gracias por el enlace. En general, estoy buscando identificar qué es lo que estos objetos filtrados son más que el motivo por el que no se están recolectando. – mmccoo