Python memory leaks
Hire the world's top talent on demand or became one of them at Toptal: https://topt.al/25cXVn
and get $2,000 discount on your first invoice
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Magic Ocean Looping
--
Chapters
00:00 Python Memory Leaks
00:24 Accepted Answer Score 122
00:46 Answer 2 Score 13
01:33 Answer 3 Score 34
01:49 Answer 4 Score 109
02:35 Thank you
--
Full question
https://stackoverflow.com/questions/1435...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #debugging #memorymanagement #memoryleaks
#avk47
ACCEPTED ANSWER
Score 122
Have a look at this article: Tracing python memory leaks
Also, note that the garbage collection module actually can have debug flags set. Look at the set_debug function. Additionally, look at this code by Gnibbler for determining the types of objects that have been created after a call.
ANSWER 2
Score 109
I tried out most options mentioned previously but found this small and intuitive package to be the best: pympler
It's quite straight forward to trace objects that were not garbage-collected, check this small example:
install package via pip install pympler
from pympler.tracker import SummaryTracker
tracker = SummaryTracker()
# ... some code you want to investigate ...
tracker.print_diff()
The output shows you all the objects that have been added, plus the memory they consumed.
Sample output:
types | # objects | total size
====================================== | =========== | ============
list | 1095 | 160.78 KB
str | 1093 | 66.33 KB
int | 120 | 2.81 KB
dict | 3 | 840 B
frame (codename: create_summary) | 1 | 560 B
frame (codename: print_diff) | 1 | 480 B
This package provides a number of more features. Check pympler's documentation, in particular the section Identifying memory leaks.
ANSWER 3
Score 34
Let me recommend mem_top tool I created
It helped me to solve a similar issue
It just instantly shows top suspects for memory leaks in a Python program
ANSWER 4
Score 13
You should specially have a look on your global or static data (long living data).
When this data grows without restriction, you can also get troubles in Python.
The garbage collector can only collect data, that is not referenced any more. But your static data can hookup data elements that should be freed.
Another problem can be memory cycles, but at least in theory the Garbage collector should find and eliminate cycles -- at least as long as they are not hooked on some long living data.
What kinds of long living data are specially troublesome? Have a good look on any lists and dictionaries -- they can grow without any limit. In dictionaries you might even don't see the trouble coming since when you access dicts, the number of keys in the dictionary might not be of big visibility to you ...