[python-nl] Python memory leak?
Martijn Pieters
mj at python.org
Wed Feb 22 14:55:32 CET 2006
Gijs Molenaar wrote:
> Wie o wie, heeft er een idee?
Zonder naar je code te kijken, kan ik wel wat pointers geven:
- Globale mutable variabelen zijn vaak een bron van leaks; als je elke
loop een item in een globale list stopt dan ruimt Python dat nooit op
want er bestaat nog een referentie.
- Probeer het probleem in een testopstelling te recreëren; daarna kun
je door een binary search (helft van de code uitzetten) de leak te
isoleren.
- Probeer circular references te vermijden; zelfs met GC support voor
circular references kunnen objecten in het geheugen blijven. Als je
toch circulaire referenties moet gebruiken, probeer dan weakrefs toe
te passen (standaard library module 'weakref').
- Print reference counts en referents als je de problemen niet precies
kan isoleren; sys.getrefcount laat je reference counts zien voor een
gegeven object, en gc.get_referrers geeft je de objecten die refereren
naar een gegeven object.
- Desnoods zet je de garbage collection debug traces aan met
gc.set_debug.
Het is waar dat het Python memorymodel moeilijk gehuegen weer vrijgeeft
aan het OS door fragmentatie, maar dat betekend nog niet dat je geheugen
gebruik alleen maar groeit.
Martijn Pieters
More information about the Python-nl
mailing list