[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