2010-10-26 10 views
5

Estoy siguiendo una situación de pérdida de memoria muy difícil (o más probablemente memoria abandonada). Hago lo siguiente:¿Cómo interpretar los resultados de las asignaciones y el rastreador de VM en los instrumentos?

1) comienzo mi solicitud
2) llegar a un punto donde la aplicación mostrará la fuga
3) iniciar instrumentos usando la opción 'asignaciones'
4) adjuntar a mi proceso y iniciar la grabación
5) tomar una heapshot inicial
6) tomar una instantánea inicial con VM rastreador
7) reproducir los pasos que causan la memoria se eleve
8) tomar otra heapshot
9) tomar otra instantánea con VM rastreador

Si hago esos pasos, veo resultados que realmente no tienen sentido. Espero que me falta algo de información sobre cómo funcionan estas herramientas. Por ejemplo, sé que la herramienta 'leakies' no rastrea TODOS los tipos de asignaciones de memoria (aplicaciones de carbono, por ejemplo). Mi aplicación es una enorme aplicación heredada que podría tener un extraño código de asignación en algún subsistema anticuado con el que no estoy familiarizado. Dicho esto, esto es lo que veo:

  • en la instantánea inicial de VM rastreador cuando miro el resumen, el tipo MALLOC_SMALL es bastante pequeño en aproximadamente 72 MB (tamaño virtual)
  • en la segunda instantánea, MALLOC_SMALL uso ha crecido hasta 224 MB (tamaño nuevo virtual)
  • en la segunda heapshot, me dice el heapgrowth es de 45 MB

Entonces, ¿cómo puede crecer MALLOC_SMALL de 72MB a 224MB, pero el heapgrowth sólo 45 MB? ¿El instrumento Allocations está omitiendo algo que VMTracker está grabando?

Además de que me falta algo en el instrumento Allocations ... si miro las NUEVAS regiones enumeradas en MALLOC_SMALL (las que no estaban en la primera instantánea, pero estaban en la segunda), esas direcciones deberían corresponder a páginas que fueron asignadas y representan la diferencia de 72MB-> 224MB, ¿correcto? Entonces, recordé el rango de direcciones para esa región (p. Ej., 0x79000000-0x7b000000), y volví al instrumento Allocations y clasifiqué la lista de 'Todos los objetos' por dirección. Luego busco direcciones en ese rango. Sin embargo, solo veo 4 asignaciones que solo representan 4KB. ¿Dónde están los otros 32 MB que el rastreador de VM informó en esa región?

Cualquier ayuda se agradece .... estoy esperando que es algo básico acerca de cómo estas herramientas de trabajo que estoy simplemente no comprensión.

Respuesta

Cuestiones relacionadas