blob: 3a0b1e0797205a7d556f09bd326983b69dc226e6 [file] [log] [blame]
Victor Stinnered3b0bc2013-11-23 12:27:24 +01001:mod:`tracemalloc` --- Trace memory allocations
2===============================================
3
4.. module:: tracemalloc
5 :synopsis: Trace memory allocations.
6
R David Murray6d5cb072013-12-20 14:48:50 -05007.. versionadded:: 3.4
8
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04009**Source code:** :source:`Lib/tracemalloc.py`
10
11--------------
12
Victor Stinnered3b0bc2013-11-23 12:27:24 +010013The tracemalloc module is a debug tool to trace memory blocks allocated by
14Python. It provides the following information:
15
16* Traceback where an object was allocated
17* Statistics on allocated memory blocks per filename and per line number:
18 total size, number and average size of allocated memory blocks
19* Compute the differences between two snapshots to detect memory leaks
20
21To trace most memory blocks allocated by Python, the module should be started
22as early as possible by setting the :envvar:`PYTHONTRACEMALLOC` environment
23variable to ``1``, or by using :option:`-X` ``tracemalloc`` command line
24option. The :func:`tracemalloc.start` function can be called at runtime to
25start tracing Python memory allocations.
26
27By default, a trace of an allocated memory block only stores the most recent
28frame (1 frame). To store 25 frames at startup: set the
29:envvar:`PYTHONTRACEMALLOC` environment variable to ``25``, or use the
Victor Stinner3728d6c2013-11-23 12:37:20 +010030:option:`-X` ``tracemalloc=25`` command line option.
Victor Stinnered3b0bc2013-11-23 12:27:24 +010031
Victor Stinnered3b0bc2013-11-23 12:27:24 +010032
33Examples
Georg Brandl717e0282014-10-31 10:21:07 +010034--------
Victor Stinnered3b0bc2013-11-23 12:27:24 +010035
36Display the top 10
Georg Brandl717e0282014-10-31 10:21:07 +010037^^^^^^^^^^^^^^^^^^
Victor Stinnered3b0bc2013-11-23 12:27:24 +010038
39Display the 10 files allocating the most memory::
40
41 import tracemalloc
42
43 tracemalloc.start()
44
45 # ... run your application ...
46
47 snapshot = tracemalloc.take_snapshot()
48 top_stats = snapshot.statistics('lineno')
49
50 print("[ Top 10 ]")
51 for stat in top_stats[:10]:
52 print(stat)
53
54
55Example of output of the Python test suite::
56
57 [ Top 10 ]
58 <frozen importlib._bootstrap>:716: size=4855 KiB, count=39328, average=126 B
59 <frozen importlib._bootstrap>:284: size=521 KiB, count=3199, average=167 B
60 /usr/lib/python3.4/collections/__init__.py:368: size=244 KiB, count=2315, average=108 B
61 /usr/lib/python3.4/unittest/case.py:381: size=185 KiB, count=779, average=243 B
62 /usr/lib/python3.4/unittest/case.py:402: size=154 KiB, count=378, average=416 B
63 /usr/lib/python3.4/abc.py:133: size=88.7 KiB, count=347, average=262 B
64 <frozen importlib._bootstrap>:1446: size=70.4 KiB, count=911, average=79 B
65 <frozen importlib._bootstrap>:1454: size=52.0 KiB, count=25, average=2131 B
66 <string>:5: size=49.7 KiB, count=148, average=344 B
67 /usr/lib/python3.4/sysconfig.py:411: size=48.0 KiB, count=1, average=48.0 KiB
68
69We can see that Python loaded ``4.8 MiB`` data (bytecode and constants) from
70modules and that the :mod:`collections` module allocated ``244 KiB`` to build
71:class:`~collections.namedtuple` types.
72
73See :meth:`Snapshot.statistics` for more options.
74
75
76Compute differences
Georg Brandl717e0282014-10-31 10:21:07 +010077^^^^^^^^^^^^^^^^^^^
Victor Stinnered3b0bc2013-11-23 12:27:24 +010078
79Take two snapshots and display the differences::
80
81 import tracemalloc
82 tracemalloc.start()
83 # ... start your application ...
84
85 snapshot1 = tracemalloc.take_snapshot()
86 # ... call the function leaking memory ...
87 snapshot2 = tracemalloc.take_snapshot()
88
89 top_stats = snapshot2.compare_to(snapshot1, 'lineno')
90
91 print("[ Top 10 differences ]")
92 for stat in top_stats[:10]:
93 print(stat)
94
95Example of output before/after running some tests of the Python test suite::
96
97 [ Top 10 differences ]
98 <frozen importlib._bootstrap>:716: size=8173 KiB (+4428 KiB), count=71332 (+39369), average=117 B
99 /usr/lib/python3.4/linecache.py:127: size=940 KiB (+940 KiB), count=8106 (+8106), average=119 B
100 /usr/lib/python3.4/unittest/case.py:571: size=298 KiB (+298 KiB), count=589 (+589), average=519 B
101 <frozen importlib._bootstrap>:284: size=1005 KiB (+166 KiB), count=7423 (+1526), average=139 B
102 /usr/lib/python3.4/mimetypes.py:217: size=112 KiB (+112 KiB), count=1334 (+1334), average=86 B
103 /usr/lib/python3.4/http/server.py:848: size=96.0 KiB (+96.0 KiB), count=1 (+1), average=96.0 KiB
104 /usr/lib/python3.4/inspect.py:1465: size=83.5 KiB (+83.5 KiB), count=109 (+109), average=784 B
105 /usr/lib/python3.4/unittest/mock.py:491: size=77.7 KiB (+77.7 KiB), count=143 (+143), average=557 B
106 /usr/lib/python3.4/urllib/parse.py:476: size=71.8 KiB (+71.8 KiB), count=969 (+969), average=76 B
107 /usr/lib/python3.4/contextlib.py:38: size=67.2 KiB (+67.2 KiB), count=126 (+126), average=546 B
108
Victor Stinner00773df2013-11-26 00:40:10 +0100109We can see that Python has loaded ``8.2 MiB`` of module data (bytecode and
110constants), and that this is ``4.4 MiB`` more than had been loaded before the
111tests, when the previous snapshot was taken. Similarly, the :mod:`linecache`
112module has cached ``940 KiB`` of Python source code to format tracebacks, all
113of it since the previous snapshot.
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100114
115If the system has little free memory, snapshots can be written on disk using
116the :meth:`Snapshot.dump` method to analyze the snapshot offline. Then use the
117:meth:`Snapshot.load` method reload the snapshot.
118
119
120Get the traceback of a memory block
Georg Brandl717e0282014-10-31 10:21:07 +0100121^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100122
123Code to display the traceback of the biggest memory block::
124
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100125 import tracemalloc
126
Victor Stinner3728d6c2013-11-23 12:37:20 +0100127 # Store 25 frames
128 tracemalloc.start(25)
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100129
130 # ... run your application ...
131
132 snapshot = tracemalloc.take_snapshot()
133 top_stats = snapshot.statistics('traceback')
134
135 # pick the biggest memory block
136 stat = top_stats[0]
137 print("%s memory blocks: %.1f KiB" % (stat.count, stat.size / 1024))
Victor Stinner23f628d2014-02-16 23:53:38 +0100138 for line in stat.traceback.format():
139 print(line)
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100140
141Example of output of the Python test suite (traceback limited to 25 frames)::
142
143 903 memory blocks: 870.1 KiB
144 File "<frozen importlib._bootstrap>", line 716
145 File "<frozen importlib._bootstrap>", line 1036
146 File "<frozen importlib._bootstrap>", line 934
147 File "<frozen importlib._bootstrap>", line 1068
148 File "<frozen importlib._bootstrap>", line 619
149 File "<frozen importlib._bootstrap>", line 1581
150 File "<frozen importlib._bootstrap>", line 1614
151 File "/usr/lib/python3.4/doctest.py", line 101
152 import pdb
153 File "<frozen importlib._bootstrap>", line 284
154 File "<frozen importlib._bootstrap>", line 938
155 File "<frozen importlib._bootstrap>", line 1068
156 File "<frozen importlib._bootstrap>", line 619
157 File "<frozen importlib._bootstrap>", line 1581
158 File "<frozen importlib._bootstrap>", line 1614
159 File "/usr/lib/python3.4/test/support/__init__.py", line 1728
160 import doctest
161 File "/usr/lib/python3.4/test/test_pickletools.py", line 21
162 support.run_doctest(pickletools)
163 File "/usr/lib/python3.4/test/regrtest.py", line 1276
164 test_runner()
165 File "/usr/lib/python3.4/test/regrtest.py", line 976
166 display_failure=not verbose)
167 File "/usr/lib/python3.4/test/regrtest.py", line 761
168 match_tests=ns.match_tests)
169 File "/usr/lib/python3.4/test/regrtest.py", line 1563
170 main()
171 File "/usr/lib/python3.4/test/__main__.py", line 3
172 regrtest.main_in_temp_cwd()
173 File "/usr/lib/python3.4/runpy.py", line 73
174 exec(code, run_globals)
175 File "/usr/lib/python3.4/runpy.py", line 160
176 "__main__", fname, loader, pkg_name)
177
Victor Stinner00773df2013-11-26 00:40:10 +0100178We can see that the most memory was allocated in the :mod:`importlib` module to
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100179load data (bytecode and constants) from modules: ``870 KiB``. The traceback is
Victor Stinner00773df2013-11-26 00:40:10 +0100180where the :mod:`importlib` loaded data most recently: on the ``import pdb``
181line of the :mod:`doctest` module. The traceback may change if a new module is
182loaded.
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100183
184
185Pretty top
Georg Brandl717e0282014-10-31 10:21:07 +0100186^^^^^^^^^^
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100187
188Code to display the 10 lines allocating the most memory with a pretty output,
189ignoring ``<frozen importlib._bootstrap>`` and ``<unknown>`` files::
190
Victor Stinner637d2e92014-03-11 08:12:48 +0100191 import linecache
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100192 import os
193 import tracemalloc
194
195 def display_top(snapshot, group_by='lineno', limit=10):
196 snapshot = snapshot.filter_traces((
197 tracemalloc.Filter(False, "<frozen importlib._bootstrap>"),
198 tracemalloc.Filter(False, "<unknown>"),
199 ))
200 top_stats = snapshot.statistics(group_by)
201
202 print("Top %s lines" % limit)
203 for index, stat in enumerate(top_stats[:limit], 1):
204 frame = stat.traceback[0]
205 # replace "/path/to/module/file.py" with "module/file.py"
206 filename = os.sep.join(frame.filename.split(os.sep)[-2:])
207 print("#%s: %s:%s: %.1f KiB"
Victor Stinnerf70200e2014-03-03 11:57:57 +0100208 % (index, filename, frame.lineno, stat.size / 1024))
Victor Stinner637d2e92014-03-11 08:12:48 +0100209 line = linecache.getline(frame.filename, frame.lineno).strip()
210 if line:
211 print(' %s' % line)
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100212
213 other = top_stats[limit:]
214 if other:
215 size = sum(stat.size for stat in other)
216 print("%s other: %.1f KiB" % (len(other), size / 1024))
217 total = sum(stat.size for stat in top_stats)
218 print("Total allocated size: %.1f KiB" % (total / 1024))
219
220 tracemalloc.start()
221
222 # ... run your application ...
223
224 snapshot = tracemalloc.take_snapshot()
Victor Stinnerf70200e2014-03-03 11:57:57 +0100225 display_top(snapshot)
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100226
227Example of output of the Python test suite::
228
Victor Stinner637d2e92014-03-11 08:12:48 +0100229 Top 10 lines
230 #1: Lib/base64.py:414: 419.8 KiB
231 _b85chars2 = [(a + b) for a in _b85chars for b in _b85chars]
232 #2: Lib/base64.py:306: 419.8 KiB
233 _a85chars2 = [(a + b) for a in _a85chars for b in _a85chars]
234 #3: collections/__init__.py:368: 293.6 KiB
235 exec(class_definition, namespace)
236 #4: Lib/abc.py:133: 115.2 KiB
237 cls = super().__new__(mcls, name, bases, namespace)
238 #5: unittest/case.py:574: 103.1 KiB
239 testMethod()
240 #6: Lib/linecache.py:127: 95.4 KiB
241 lines = fp.readlines()
242 #7: urllib/parse.py:476: 71.8 KiB
243 for a in _hexdig for b in _hexdig}
244 #8: <string>:5: 62.0 KiB
245 #9: Lib/_weakrefset.py:37: 60.0 KiB
246 self.data = set()
247 #10: Lib/base64.py:142: 59.8 KiB
248 _b32tab2 = [a + b for a in _b32tab for b in _b32tab]
249 6220 other: 3602.8 KiB
250 Total allocated size: 5303.1 KiB
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100251
252See :meth:`Snapshot.statistics` for more options.
253
254
255API
Georg Brandl717e0282014-10-31 10:21:07 +0100256---
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100257
258Functions
Georg Brandl717e0282014-10-31 10:21:07 +0100259^^^^^^^^^
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100260
261.. function:: clear_traces()
262
263 Clear traces of memory blocks allocated by Python.
264
265 See also :func:`stop`.
266
267
268.. function:: get_object_traceback(obj)
269
270 Get the traceback where the Python object *obj* was allocated.
271 Return a :class:`Traceback` instance, or ``None`` if the :mod:`tracemalloc`
272 module is not tracing memory allocations or did not trace the allocation of
273 the object.
274
275 See also :func:`gc.get_referrers` and :func:`sys.getsizeof` functions.
276
277
278.. function:: get_traceback_limit()
279
280 Get the maximum number of frames stored in the traceback of a trace.
281
Victor Stinner3728d6c2013-11-23 12:37:20 +0100282 The :mod:`tracemalloc` module must be tracing memory allocations to
283 get the limit, otherwise an exception is raised.
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100284
Victor Stinner3728d6c2013-11-23 12:37:20 +0100285 The limit is set by the :func:`start` function.
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100286
287
288.. function:: get_traced_memory()
289
Victor Stinner3c0481d2013-11-27 21:39:49 +0100290 Get the current size and peak size of memory blocks traced by the
291 :mod:`tracemalloc` module as a tuple: ``(current: int, peak: int)``.
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100292
293
294.. function:: get_tracemalloc_memory()
295
296 Get the memory usage in bytes of the :mod:`tracemalloc` module used to store
297 traces of memory blocks.
298 Return an :class:`int`.
299
300
301.. function:: is_tracing()
302
303 ``True`` if the :mod:`tracemalloc` module is tracing Python memory
304 allocations, ``False`` otherwise.
305
306 See also :func:`start` and :func:`stop` functions.
307
308
Victor Stinner3728d6c2013-11-23 12:37:20 +0100309.. function:: start(nframe: int=1)
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100310
Victor Stinner3728d6c2013-11-23 12:37:20 +0100311 Start tracing Python memory allocations: install hooks on Python memory
312 allocators. Collected tracebacks of traces will be limited to *nframe*
313 frames. By default, a trace of a memory block only stores the most recent
314 frame: the limit is ``1``. *nframe* must be greater or equal to ``1``.
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100315
316 Storing more than ``1`` frame is only useful to compute statistics grouped
317 by ``'traceback'`` or to compute cumulative statistics: see the
318 :meth:`Snapshot.compare_to` and :meth:`Snapshot.statistics` methods.
319
320 Storing more frames increases the memory and CPU overhead of the
321 :mod:`tracemalloc` module. Use the :func:`get_tracemalloc_memory` function
322 to measure how much memory is used by the :mod:`tracemalloc` module.
323
324 The :envvar:`PYTHONTRACEMALLOC` environment variable
325 (``PYTHONTRACEMALLOC=NFRAME``) and the :option:`-X` ``tracemalloc=NFRAME``
Victor Stinner3728d6c2013-11-23 12:37:20 +0100326 command line option can be used to start tracing at startup.
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100327
Victor Stinner3728d6c2013-11-23 12:37:20 +0100328 See also :func:`stop`, :func:`is_tracing` and :func:`get_traceback_limit`
329 functions.
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100330
331
332.. function:: stop()
333
334 Stop tracing Python memory allocations: uninstall hooks on Python memory
Victor Stinner00773df2013-11-26 00:40:10 +0100335 allocators. Also clears all previously collected traces of memory blocks
336 allocated by Python.
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100337
338 Call :func:`take_snapshot` function to take a snapshot of traces before
339 clearing them.
340
Victor Stinner00773df2013-11-26 00:40:10 +0100341 See also :func:`start`, :func:`is_tracing` and :func:`clear_traces`
342 functions.
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100343
344
345.. function:: take_snapshot()
346
347 Take a snapshot of traces of memory blocks allocated by Python. Return a new
348 :class:`Snapshot` instance.
349
350 The snapshot does not include memory blocks allocated before the
351 :mod:`tracemalloc` module started to trace memory allocations.
352
353 Tracebacks of traces are limited to :func:`get_traceback_limit` frames. Use
Victor Stinner3728d6c2013-11-23 12:37:20 +0100354 the *nframe* parameter of the :func:`start` function to store more frames.
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100355
356 The :mod:`tracemalloc` module must be tracing memory allocations to take a
Donald Stufft8b852f12014-05-20 12:58:38 -0400357 snapshot, see the :func:`start` function.
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100358
359 See also the :func:`get_object_traceback` function.
360
361
362Filter
Georg Brandl717e0282014-10-31 10:21:07 +0100363^^^^^^
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100364
365.. class:: Filter(inclusive: bool, filename_pattern: str, lineno: int=None, all_frames: bool=False)
366
367 Filter on traces of memory blocks.
368
369 See the :func:`fnmatch.fnmatch` function for the syntax of
Brett Cannonf299abd2015-04-13 14:21:02 -0400370 *filename_pattern*. The ``'.pyc'`` file extension is
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100371 replaced with ``'.py'``.
372
373 Examples:
374
375 * ``Filter(True, subprocess.__file__)`` only includes traces of the
376 :mod:`subprocess` module
377 * ``Filter(False, tracemalloc.__file__)`` excludes traces of the
378 :mod:`tracemalloc` module
379 * ``Filter(False, "<unknown>")`` excludes empty tracebacks
380
Brett Cannonf299abd2015-04-13 14:21:02 -0400381
382 .. versionchanged:: 3.5
383 The ``'.pyo'`` file extension is no longer replaced with ``'.py'``.
384
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100385 .. attribute:: inclusive
386
387 If *inclusive* is ``True`` (include), only trace memory blocks allocated
388 in a file with a name matching :attr:`filename_pattern` at line number
389 :attr:`lineno`.
390
391 If *inclusive* is ``False`` (exclude), ignore memory blocks allocated in
392 a file with a name matching :attr:`filename_pattern` at line number
393 :attr:`lineno`.
394
395 .. attribute:: lineno
396
397 Line number (``int``) of the filter. If *lineno* is ``None``, the filter
398 matches any line number.
399
400 .. attribute:: filename_pattern
401
402 Filename pattern of the filter (``str``).
403
404 .. attribute:: all_frames
405
406 If *all_frames* is ``True``, all frames of the traceback are checked. If
407 *all_frames* is ``False``, only the most recent frame is checked.
408
Victor Stinner5362abf2013-11-27 23:39:55 +0100409 This attribute has no effect if the traceback limit is ``1``. See the
410 :func:`get_traceback_limit` function and :attr:`Snapshot.traceback_limit`
411 attribute.
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100412
413
414Frame
Georg Brandl717e0282014-10-31 10:21:07 +0100415^^^^^
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100416
417.. class:: Frame
418
419 Frame of a traceback.
420
421 The :class:`Traceback` class is a sequence of :class:`Frame` instances.
422
423 .. attribute:: filename
424
425 Filename (``str``).
426
427 .. attribute:: lineno
428
429 Line number (``int``).
430
431
432Snapshot
Georg Brandl717e0282014-10-31 10:21:07 +0100433^^^^^^^^
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100434
435.. class:: Snapshot
436
437 Snapshot of traces of memory blocks allocated by Python.
438
439 The :func:`take_snapshot` function creates a snapshot instance.
440
441 .. method:: compare_to(old_snapshot: Snapshot, group_by: str, cumulative: bool=False)
442
443 Compute the differences with an old snapshot. Get statistics as a sorted
444 list of :class:`StatisticDiff` instances grouped by *group_by*.
445
Berker Peksag49008772014-11-10 23:15:32 +0200446 See the :meth:`Snapshot.statistics` method for *group_by* and *cumulative*
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100447 parameters.
448
449 The result is sorted from the biggest to the smallest by: absolute value
450 of :attr:`StatisticDiff.size_diff`, :attr:`StatisticDiff.size`, absolute
451 value of :attr:`StatisticDiff.count_diff`, :attr:`Statistic.count` and
452 then by :attr:`StatisticDiff.traceback`.
453
454
455 .. method:: dump(filename)
456
457 Write the snapshot into a file.
458
459 Use :meth:`load` to reload the snapshot.
460
461
462 .. method:: filter_traces(filters)
463
464 Create a new :class:`Snapshot` instance with a filtered :attr:`traces`
465 sequence, *filters* is a list of :class:`Filter` instances. If *filters*
466 is an empty list, return a new :class:`Snapshot` instance with a copy of
467 the traces.
468
469 All inclusive filters are applied at once, a trace is ignored if no
470 inclusive filters match it. A trace is ignored if at least one exclusive
Martin Panter1f1177d2015-10-31 11:48:53 +0000471 filter matches it.
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100472
473
474 .. classmethod:: load(filename)
475
476 Load a snapshot from a file.
477
478 See also :meth:`dump`.
479
480
481 .. method:: statistics(group_by: str, cumulative: bool=False)
482
483 Get statistics as a sorted list of :class:`Statistic` instances grouped
484 by *group_by*:
485
486 ===================== ========================
487 group_by description
488 ===================== ========================
489 ``'filename'`` filename
490 ``'lineno'`` filename and line number
491 ``'traceback'`` traceback
492 ===================== ========================
493
494 If *cumulative* is ``True``, cumulate size and count of memory blocks of
495 all frames of the traceback of a trace, not only the most recent frame.
496 The cumulative mode can only be used with *group_by* equals to
Victor Stinner8e3708d2013-11-26 00:45:47 +0100497 ``'filename'`` and ``'lineno'``.
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100498
499 The result is sorted from the biggest to the smallest by:
500 :attr:`Statistic.size`, :attr:`Statistic.count` and then by
501 :attr:`Statistic.traceback`.
502
503
504 .. attribute:: traceback_limit
505
506 Maximum number of frames stored in the traceback of :attr:`traces`:
507 result of the :func:`get_traceback_limit` when the snapshot was taken.
508
509 .. attribute:: traces
510
511 Traces of all memory blocks allocated by Python: sequence of
512 :class:`Trace` instances.
513
514 The sequence has an undefined order. Use the :meth:`Snapshot.statistics`
515 method to get a sorted list of statistics.
516
517
518Statistic
Georg Brandl717e0282014-10-31 10:21:07 +0100519^^^^^^^^^
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100520
521.. class:: Statistic
522
523 Statistic on memory allocations.
524
525 :func:`Snapshot.statistics` returns a list of :class:`Statistic` instances.
526
527 See also the :class:`StatisticDiff` class.
528
529 .. attribute:: count
530
531 Number of memory blocks (``int``).
532
533 .. attribute:: size
534
535 Total size of memory blocks in bytes (``int``).
536
537 .. attribute:: traceback
538
539 Traceback where the memory block was allocated, :class:`Traceback`
540 instance.
541
542
543StatisticDiff
Georg Brandl717e0282014-10-31 10:21:07 +0100544^^^^^^^^^^^^^
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100545
546.. class:: StatisticDiff
547
548 Statistic difference on memory allocations between an old and a new
549 :class:`Snapshot` instance.
550
551 :func:`Snapshot.compare_to` returns a list of :class:`StatisticDiff`
552 instances. See also the :class:`Statistic` class.
553
554 .. attribute:: count
555
556 Number of memory blocks in the new snapshot (``int``): ``0`` if
557 the memory blocks have been released in the new snapshot.
558
559 .. attribute:: count_diff
560
561 Difference of number of memory blocks between the old and the new
562 snapshots (``int``): ``0`` if the memory blocks have been allocated in
563 the new snapshot.
564
565 .. attribute:: size
566
567 Total size of memory blocks in bytes in the new snapshot (``int``):
568 ``0`` if the memory blocks have been released in the new snapshot.
569
570 .. attribute:: size_diff
571
572 Difference of total size of memory blocks in bytes between the old and
573 the new snapshots (``int``): ``0`` if the memory blocks have been
574 allocated in the new snapshot.
575
576 .. attribute:: traceback
577
578 Traceback where the memory blocks were allocated, :class:`Traceback`
579 instance.
580
581
582Trace
Georg Brandl717e0282014-10-31 10:21:07 +0100583^^^^^
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100584
585.. class:: Trace
586
587 Trace of a memory block.
588
589 The :attr:`Snapshot.traces` attribute is a sequence of :class:`Trace`
590 instances.
591
592 .. attribute:: size
593
594 Size of the memory block in bytes (``int``).
595
596 .. attribute:: traceback
597
598 Traceback where the memory block was allocated, :class:`Traceback`
599 instance.
600
601
602Traceback
Georg Brandl717e0282014-10-31 10:21:07 +0100603^^^^^^^^^
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100604
605.. class:: Traceback
606
607 Sequence of :class:`Frame` instances sorted from the most recent frame to
608 the oldest frame.
609
610 A traceback contains at least ``1`` frame. If the ``tracemalloc`` module
611 failed to get a frame, the filename ``"<unknown>"`` at line number ``0`` is
612 used.
613
614 When a snapshot is taken, tracebacks of traces are limited to
615 :func:`get_traceback_limit` frames. See the :func:`take_snapshot` function.
616
617 The :attr:`Trace.traceback` attribute is an instance of :class:`Traceback`
618 instance.
619
Victor Stinner23f628d2014-02-16 23:53:38 +0100620 .. method:: format(limit=None)
621
622 Format the traceback as a list of lines with newlines. Use the
623 :mod:`linecache` module to retrieve lines from the source code. If
624 *limit* is set, only format the *limit* most recent frames.
625
626 Similar to the :func:`traceback.format_tb` function, except that
Martin Panterd5db1472016-02-08 01:34:09 +0000627 :meth:`.format` does not include newlines.
Victor Stinner23f628d2014-02-16 23:53:38 +0100628
629 Example::
630
631 print("Traceback (most recent call first):")
632 for line in traceback:
633 print(line)
634
635 Output::
636
637 Traceback (most recent call first):
638 File "test.py", line 9
639 obj = Object()
640 File "test.py", line 12
641 tb = tracemalloc.get_object_traceback(f())