The following are examples of py_malloc.d This is an experimental script to identify who is calling malloc() for memory allocation, and to print distribution plots of the requested bytes. Here you can see it running on Code/Python/func_abc.py # py_malloc.d -c ./func_abc.py Tracing... Hit Ctrl-C to end. Function A Function B Function C Python malloc byte distributions by engine caller, libpython2.4.so.1.0`_PyUnicode_New, total bytes = 2 value ------------- Distribution ------------- count 1 | 0 2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 4 | 0 libpython2.4.so.1.0`find_key, total bytes = 16 value ------------- Distribution ------------- count 8 | 0 16 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 32 | 0 libpython2.4.so.1.0`PyInterpreterState_New, total bytes = 36 value ------------- Distribution ------------- count 16 | 0 32 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 64 | 0 libpython2.4.so.1.0`_PyImport_Init, total bytes = 60 value ------------- Distribution ------------- count 16 | 0 32 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 64 | 0 libpython2.4.so.1.0`PyThreadState_New, total bytes = 84 value ------------- Distribution ------------- count 32 | 0 64 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 128 | 0 libpython2.4.so.1.0`pmerge, total bytes = 132 value ------------- Distribution ------------- count 2 | 0 4 |@@ 1 8 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 16 16 | 0 libpython2.4.so.1.0`PyThread_allocate_lock, total bytes = 144 value ------------- Distribution ------------- count 16 | 0 32 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 3 64 | 0 libpython2.4.so.1.0`convertsimple, total bytes = 210 value ------------- Distribution ------------- count 16 | 0 32 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 5 64 | 0 libc.so.1`strdup, total bytes = 451 value ------------- Distribution ------------- count 1 | 0 2 |@@@ 1 4 |@@@ 1 8 | 0 16 |@@@@@@@@@@@@@@@@@@@@ 8 32 |@@@@@@@@@@@@@@@ 6 64 | 0 libpython2.4.so.1.0`PyList_New, total bytes = 528 value ------------- Distribution ------------- count 2 | 0 4 |@@@@@@@@@@@@@@@@@@ 22 8 |@@@@@@@@@@@@@@@@@ 21 16 |@@@@@ 6 32 | 0 64 | 0 128 |@ 1 256 | 0 libpython2.4.so.1.0`PyTokenizer_FromFile, total bytes = 1024 value ------------- Distribution ------------- count 512 | 0 1024 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 2048 | 0 libpython2.4.so.1.0`_PyExc_Init, total bytes = 1058 value ------------- Distribution ------------- count 8 | 0 16 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 40 32 |@@ 2 64 | 0 libpython2.4.so.1.0`tok_new, total bytes = 1832 value ------------- Distribution ------------- count 256 | 0 512 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 1024 | 0 libpython2.4.so.1.0`fill_free_list, total bytes = 1976 value ------------- Distribution ------------- count 256 | 0 512 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 1024 | 0 libpython2.4.so.1.0`PyParser_New, total bytes = 12024 value ------------- Distribution ------------- count 2048 | 0 4096 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 8192 | 0 libpython2.4.so.1.0`PyObject_Malloc, total bytes = 35152 value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@@@@@@@ 20 512 |@@@@@@@ 7 1024 |@@@@@@@@@@ 11 2048 |@@@@ 4 4096 | 0 libpython2.4.so.1.0`PyMem_Malloc, total bytes = 50683 value ------------- Distribution ------------- count 4 | 0 8 |@@@ 2 16 |@@@@@@@ 4 32 |@@ 1 64 |@@@@@@@@@@@@@ 8 128 |@@@@@ 3 256 | 0 512 | 0 1024 | 0 2048 | 0 4096 | 0 8192 |@@@@@@@@@@ 6 16384 | 0 libc.so.1`_findbuf, total bytes = 51800 value ------------- Distribution ------------- count 256 | 0 512 |@@@@@@@@@@@@@@@ 4 1024 |@@@@ 1 2048 | 0 4096 |@@@@@@@ 2 8192 |@@@@@@@@@@@@@@@ 4 16384 | 0 libpython2.4.so.1.0`dictresize, total bytes = 178752 value ------------- Distribution ------------- count 64 | 0 128 |@ 1 256 |@@@@@@@@@@@@@@@@@@@@@ 29 512 | 0 1024 |@@@@@@@@@@@@@@ 19 2048 |@ 1 4096 |@ 2 8192 | 0 16384 |@ 1 32768 | 0 65536 |@ 1 131072 | 0 libpython2.4.so.1.0`new_arena, total bytes = 262208 value ------------- Distribution ------------- count 32 | 0 64 |@@@@@@@@@@@@@@@@@@@@ 1 128 | 0 256 | 0 512 | 0 1024 | 0 2048 | 0 4096 | 0 8192 | 0 16384 | 0 32768 | 0 65536 | 0 131072 | 0 262144 |@@@@@@@@@@@@@@@@@@@@ 1 524288 | 0 Python malloc byte distributions by Python file and function, site.py, addsitepackages, bytes total = 4 value ------------- Distribution ------------- count 2 | 0 4 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 8 | 0 site.py, abs__file__, bytes total = 60 value ------------- Distribution ------------- count 16 | 0 32 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 64 | 0 posixpath.py, exists, bytes total = 83 value ------------- Distribution ------------- count 16 | 0 32 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 64 | 0 stat.py, S_ISDIR, bytes total = 364 value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 512 | 0 site.py, _init_pathinfo, bytes total = 380 value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 512 | 0 UserDict.py, DictMixin, bytes total = 384 value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 512 | 0 codecs.py, StreamReader, bytes total = 384 value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 512 | 0 codecs.py, StreamReaderWriter, bytes total = 384 value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 512 | 0 codecs.py, StreamRecoder, bytes total = 384 value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 512 | 0 codecs.py, StreamWriter, bytes total = 384 value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 512 | 0 os.py, _Environ, bytes total = 384 value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 512 | 0 site.py, _Printer, bytes total = 384 value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 512 | 0 site.py, addsitedir, bytes total = 388 value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 512 | 0 linecache.py, ?, bytes total = 396 value ------------- Distribution ------------- count 4 | 0 8 |@@@@@@@@@@@@@@@@@@@@ 1 16 | 0 32 | 0 64 | 0 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@ 1 512 | 0 posixpath.py, isdir, bytes total = 608 value ------------- Distribution ------------- count 1 | 0 2 |@@@@@@@ 2 4 | 0 8 | 0 16 |@@@@@@@@@@@@@@@@@@@@@@@ 7 32 |@@@@@@@ 2 64 | 0 128 | 0 256 |@@@ 1 512 | 0 os.py, _get_exports_list, bytes total = 612 value ------------- Distribution ------------- count 256 | 0 512 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 1024 | 0 posixpath.py, abspath, bytes total = 728 value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 512 | 0 site.py, execsitecustomize, bytes total = 790 value ------------- Distribution ------------- count 16 | 0 32 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 9 64 | 0 128 | 0 256 |@@@@ 1 512 | 0 UserDict.py, UserDict, bytes total = 1920 value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@ 1 512 | 0 1024 |@@@@@@@@@@@@@@@@@@@@ 1 2048 | 0 stat.py, ?, bytes total = 1920 value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@ 1 512 | 0 1024 |@@@@@@@@@@@@@@@@@@@@ 1 2048 | 0 types.py, ?, bytes total = 2680 value ------------- Distribution ------------- count 2 | 0 4 |@@@@@@ 1 8 |@@@@@@@@@@@ 2 16 | 0 32 | 0 64 | 0 128 | 0 256 |@@@@@@@@@@@@@@@@@ 3 512 | 0 1024 |@@@@@@ 1 2048 | 0 posixpath.py, ?, bytes total = 3306 value ------------- Distribution ------------- count 8 | 0 16 |@@@@@@@@@@@@@@@@ 2 32 | 0 64 | 0 128 | 0 256 |@@@@@@@@@@@@@@@@ 2 512 | 0 1024 | 0 2048 |@@@@@@@@ 1 4096 | 0 copy_reg.py, ?, bytes total = 3547 value ------------- Distribution ------------- count 8 | 0 16 |@@@@@@@@@@@@@@@@ 2 32 | 0 64 | 0 128 | 0 256 |@@@@@@@@ 1 512 |@@@@@@@@ 1 1024 | 0 2048 |@@@@@@@@ 1 4096 | 0 warnings.py, ?, bytes total = 3924 value ------------- Distribution ------------- count 8 | 0 16 |@@@@@@@@ 1 32 |@@@@@@@@ 1 64 | 0 128 | 0 256 |@@@@@@@@@@@@@@@@ 2 512 | 0 1024 | 0 2048 |@@@@@@@@ 1 4096 | 0 func_abc.py, func_a, bytes total = 5100 value ------------- Distribution ------------- count 256 | 0 512 |@@@@@@@@@@@@@@@@@@@@ 1 1024 | 0 2048 | 0 4096 |@@@@@@@@@@@@@@@@@@@@ 1 8192 | 0 codecs.py, ?, bytes total = 5612 value ------------- Distribution ------------- count 32 | 0 64 |@@@@@@ 1 128 |@@@@@@ 1 256 |@@@@@@@@@@@ 2 512 | 0 1024 |@@@@@@@@@@@@@@@@@ 3 2048 | 0 aliases.py, ?, bytes total = 8064 value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@ 1 512 | 0 1024 |@@@@@@@@@@@@@ 1 2048 | 0 4096 |@@@@@@@@@@@@@ 1 8192 | 0 func_abc.py, ?, bytes total = 16105 value ------------- Distribution ------------- count 2 | 0 4 |@@ 1 8 |@@@@@ 2 16 |@@@@@@@@@ 4 32 |@@@@@ 2 64 | 0 128 |@@ 1 256 |@@@@@@@ 3 512 |@@ 1 1024 |@@@@@ 2 2048 | 0 4096 | 0 8192 |@@ 1 16384 | 0 os.py, ?, bytes total = 58957 value ------------- Distribution ------------- count 2 | 0 4 |@@ 3 8 |@@@@@ 6 16 |@ 1 32 |@@ 2 64 | 0 128 |@ 1 256 |@@@@@@@@@@@@@@@@@@ 23 512 |@@ 3 1024 |@@@@@ 7 2048 | 0 4096 |@@@ 4 8192 |@ 1 16384 | 0 site.py, ?, bytes total = 62589 value ------------- Distribution ------------- count 8 | 0 16 |@@@ 2 32 | 0 64 | 0 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 20 512 |@ 1 1024 |@@@ 2 2048 |@ 1 4096 | 0 8192 | 0 16384 |@@@ 2 32768 | 0 __init__.py, ?, bytes total = 62593 value ------------- Distribution ------------- count 0 | 0 1 |@@ 1 2 | 0 4 | 0 8 | 0 16 |@@@ 2 32 |@@ 1 64 | 0 128 | 0 256 |@@@@@@@@@@@ 7 512 |@@@@@@@@@@@@@@@@ 10 1024 |@@@ 2 2048 | 0 4096 | 0 8192 | 0 16384 |@@@ 2 32768 | 0 posixpath.py, join, bytes total = 262144 value ------------- Distribution ------------- count 131072 | 0 262144 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 524288 | 0 os.py, _exists, bytes total = 362768 value ------------- Distribution ------------- count 2 | 0 4 |@ 10 8 |@ 10 16 |@@ 20 32 | 0 64 | 0 128 | 0 256 |@ 7 512 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 447 1024 |@@ 20 2048 | 0 4096 |@ 10 8192 | 0 The results are divided into two sections. If a malloc() occurred while in a Python function, then that function is identified as responsible; and the results will appear in the second section - Python malloc byte distributions by Python file and function. Otherwise the caller of malloc() is identified as responsible - which will be a function from the Python engine, and these are noted in the first section - Python malloc byte distributions by engine caller.