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.