lunes, 31 de octubre de 2011

Investigando un memory leak en cocos usando objgraph


Issue 169 en cocos reportaba un memory leak usando tilemaps. El reporte inicial era muy bueno (gracias davexunit !), en tanto que incluía un bugdemo simple; lo simplifiqué un poco más eliminando dos clases de la situación.

En esencia, si se definía una escena usando ciertas clases, cuando se hacia un loop creando una nueva instancia de la escena que reemplazaba la anterior como la activa, la memoria crecía sin limite.
El script no retenía referencias directas a las escenas reemplazadas, así que quedaba alguna en cocos o en pyglet, o bien había ciclos uncolectables.

Ahora bien, una de las clases es relativamente compleja, así que no quería empezar a mirar el código todavía; lo que hacia falta era algo que apuntara mas concretamente a las partes responsables.

Buscando un poco encontré objgraph, una pequeña herramienta que informa acerca de los objetos que python tiene en memoria.