Understanding memory leak reports

Discussion in 'Python' started by Giampaolo Rodola', Dec 21, 2007.

  1. Hi,
    I'm in a big trouble since I don't know how to find some memory leaks
    I just discovered in a program of mine.
    By putting:

    import gc
    gc.set_debug(gc.DEBUG_LEAK)

    ...at the end of a script which imports a module I wrote it seems I
    have some memory leaks scattered around.
    The message printed on screen is the following:

    gc: collectable <function 00C70E70>
    gc: collectable <type 00B41018>
    gc: collectable <dict 00C6DE40>
    gc: collectable <tuple 00C09900>
    gc: collectable <tuple 00BCD510>
    gc: collectable <function 00C70EB0>
    gc: collectable <function 00C70E30>

    Since the main module is very big (more than 2800 lines of code) I do
    not understand which objects are not garbage collected.
    Is there a way to have a more detailed message to know which objects
    are not garbage collected?
    For example "function foo", "method MyClass.bar", "dict my_dict"...
    "function 00C70E70" and "tuple 00C09900" are too much generic messages
    which don't give me an idea about where the leak could be.
     
    Giampaolo Rodola', Dec 21, 2007
    #1
    1. Advertising

  2. Giampaolo Rodola'

    Guest

    On Dec 21, 12:44 pm, "Giampaolo Rodola'" <> wrote:
    > Hi,
    > I'm in a big trouble since I don't know how to find some memory leaks
    > I just discovered in a program of mine.
    > By putting:
    >
    > import gc
    > gc.set_debug(gc.DEBUG_LEAK)
    >
    > ..at the end of a script which imports a module I wrote it seems I
    > have some memory leaks scattered around.
    > The message printed on screen is the following:
    >
    > gc: collectable <function 00C70E70>
    > gc: collectable <type 00B41018>
    > gc: collectable <dict 00C6DE40>
    > gc: collectable <tuple 00C09900>
    > gc: collectable <tuple 00BCD510>
    > gc: collectable <function 00C70EB0>
    > gc: collectable <function 00C70E30>
    >
    > Since the main module is very big (more than 2800 lines of code) I do
    > not understand which objects are not garbage collected.
    > Is there a way to have a more detailed message to know which objects
    > are not garbage collected?
    > For example "function foo", "method MyClass.bar", "dict my_dict"...
    > "function 00C70E70" and "tuple 00C09900" are too much generic messages
    > which don't give me an idea about where the leak could be.


    I've never done this before, but here's what I found while Googling:

    Recipe that supposedly gives more info:
    http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65333

    Another thread on the same topic that looks quite detailed:
    http://www.thescripts.com/forum/thread22097.html

    An article or two on memory leaks in Python:
    http://utcc.utoronto.ca/~cks/space/blog/python/DebuggingPythonMemoryLeaks
    http://www.nightmare.com/medusa/memory-leaks.html

    I hope they help.

    Mike
     
    , Dec 21, 2007
    #2
    1. Advertising

  3. On 21 Dic, 20:10, wrote:
    > On Dec 21, 12:44 pm, "Giampaolo Rodola'" <> wrote:
    >
    >
    >
    >
    >
    > > Hi,
    > > I'm in a big trouble since I don't know how to find some memory leaks
    > > I just discovered in a program of mine.
    > > By putting:

    >
    > > import gc
    > > gc.set_debug(gc.DEBUG_LEAK)

    >
    > > ..at the end of a script which imports a module I wrote it seems I
    > > have some memory leaks scattered around.
    > > The message printed on screen is the following:

    >
    > > gc: collectable <function 00C70E70>
    > > gc: collectable <type 00B41018>
    > > gc: collectable <dict 00C6DE40>
    > > gc: collectable <tuple 00C09900>
    > > gc: collectable <tuple 00BCD510>
    > > gc: collectable <function 00C70EB0>
    > > gc: collectable <function 00C70E30>

    >
    > > Since the main module is very big (more than 2800 lines of code) I do
    > > not understand which objects are not garbage collected.
    > > Is there a way to have a more detailed message to know which objects
    > > are not garbage collected?
    > > For example "function foo", "method MyClass.bar", "dict my_dict"...
    > > "function 00C70E70" and "tuple 00C09900" are too much generic messages
    > > which don't give me an idea about where the leak could be.

    >
    > I've never done this before, but here's what I found while Googling:
    >
    > Recipe that supposedly gives more info:http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65333
    >
    > Another thread on the same topic that looks quite detailed:http://www.thescripts.com/forum/thread22097.html
    >
    > An article or two on memory leaks in Python:http://utcc.utoronto.ca/~cks/space/...://www.nightmare.com/medusa/memory-leaks.html
    >
    > I hope they help.
    >
    > Mike- Nascondi testo tra virgolette -
    >
    > - Mostra testo tra virgolette -


    Thanks for your search but I haven't actually found a solution yet.
    I've tried to search into the cookbook. I found other recipes playing
    with the gc module but it seems that none of them are useful for
    finding out the names of the objects causing the memory leak.
    I've tried to play with gc.get_objects() in the hope to find the real
    names manually but it returns a very large number of objects.
    If only I could find a way to make gc.get_objects() returning leaking
    objects only it would be a step forward...
    Does someone have an idea about how doing such a thing?
     
    Giampaolo Rodola', Dec 21, 2007
    #3
  4. Giampaolo Rodola'

    Ross Ridge Guest

    Giampaolo Rodola' <> wrote:
    >I'm in a big trouble since I don't know how to find some memory leaks

    ....
    >The message printed on screen is the following:
    >
    >gc: collectable <function 00C70E70>
    >gc: collectable <type 00B41018>
    >gc: collectable <dict 00C6DE40>
    >gc: collectable <tuple 00C09900>
    >gc: collectable <tuple 00BCD510>
    >gc: collectable <function 00C70EB0>
    >gc: collectable <function 00C70E30>
    >
    >Since the main module is very big (more than 2800 lines of code) I do
    >not understand which objects are not garbage collected.


    They are being garbage collected. That's what the "collectable" part
    of the message means. It's just a warning that those objects needed
    to be garbage collected because they were refering to each other in
    some sort of cycle. While the memory used was being wasted before the
    garbage collector ran, it probably doesn't have any negative effect on
    your program.

    Ross Ridge

    --
    l/ // Ross Ridge -- The Great HTMU
    [oo][oo]
    -()-/()/ http://www.csclub.uwaterloo.ca/~rridge/
    db //
     
    Ross Ridge, Dec 22, 2007
    #4
  5. On 22 Dic, 01:27, Ross Ridge <>
    wrote:
    > Giampaolo Rodola' <> wrote:
    > >I'm in a big trouble since I don't know how to find some memory leaks

    > ...
    > >The message printed on screen is the following:

    >
    > >gc: collectable <function 00C70E70>
    > >gc: collectable <type 00B41018>
    > >gc: collectable <dict 00C6DE40>
    > >gc: collectable <tuple 00C09900>
    > >gc: collectable <tuple 00BCD510>
    > >gc: collectable <function 00C70EB0>
    > >gc: collectable <function 00C70E30>

    >
    > >Since the main module is very big (more than 2800 lines of code) I do
    > >not understand which objects are not garbage collected.

    >
    > They are being garbage collected.  That's what the "collectable" part
    > of the message means.  It's just a warning that those objects needed
    > to be garbage collected because they were refering to each other in
    > some sort of cycle.  While the memory used was being wasted before the
    > garbage collector ran, it probably doesn't have any negative effect on
    > your program.
    >
    >                                                 Ross Ridge


    Uhm... that's a good news altough it doesn't seem to me that I used
    any sort of cicle.
    Thank you.
     
    Giampaolo Rodola', Dec 22, 2007
    #5
  6. On Dec 21, 1:44 pm, "Giampaolo Rodola'" <> wrote:

    > Since the main module is very big (more than 2800 lines of code)


    maybe that is the actual problem to begin with,

    you should refactor it so it it more modular and trackable, otherwise
    this is just one of the many issues that will crop up,

    just an opinion.

    i.
     
    Istvan Albert, Dec 22, 2007
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. =?Utf-8?B?QnJ5YW4=?=

    ASP net memory leak with crystal reports?

    =?Utf-8?B?QnJ5YW4=?=, Oct 16, 2006, in forum: ASP .Net
    Replies:
    0
    Views:
    770
    =?Utf-8?B?QnJ5YW4=?=
    Oct 16, 2006
  2. s.subbarayan

    Dynamic memory allocation and memory leak...

    s.subbarayan, Mar 18, 2005, in forum: C Programming
    Replies:
    10
    Views:
    720
    Eric Sosman
    Mar 22, 2005
  3. Doug Odegaard
    Replies:
    0
    Views:
    649
    Doug Odegaard
    Jun 12, 2007
  4. cham
    Replies:
    5
    Views:
    777
  5. Mark Probert
    Replies:
    4
    Views:
    340
    Mark Probert
    Feb 9, 2005
Loading...

Share This Page