Home | History | Annotate | Download | only in library
      1 :mod:`tracemalloc` --- Trace memory allocations
      2 ===============================================
      3 
      4 .. module:: tracemalloc
      5    :synopsis: Trace memory allocations.
      6 
      7 .. versionadded:: 3.4
      8 
      9 **Source code:** :source:`Lib/tracemalloc.py`
     10 
     11 --------------
     12 
     13 The tracemalloc module is a debug tool to trace memory blocks allocated by
     14 Python. 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 
     21 To trace most memory blocks allocated by Python, the module should be started
     22 as early as possible by setting the :envvar:`PYTHONTRACEMALLOC` environment
     23 variable to ``1``, or by using :option:`-X` ``tracemalloc`` command line
     24 option. The :func:`tracemalloc.start` function can be called at runtime to
     25 start tracing Python memory allocations.
     26 
     27 By default, a trace of an allocated memory block only stores the most recent
     28 frame (1 frame). To store 25 frames at startup: set the
     29 :envvar:`PYTHONTRACEMALLOC` environment variable to ``25``, or use the
     30 :option:`-X` ``tracemalloc=25`` command line option.
     31 
     32 
     33 Examples
     34 --------
     35 
     36 Display the top 10
     37 ^^^^^^^^^^^^^^^^^^
     38 
     39 Display 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 
     55 Example 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 
     69 We can see that Python loaded ``4855 KiB`` data (bytecode and constants) from
     70 modules and that the :mod:`collections` module allocated ``244 KiB`` to build
     71 :class:`~collections.namedtuple` types.
     72 
     73 See :meth:`Snapshot.statistics` for more options.
     74 
     75 
     76 Compute differences
     77 ^^^^^^^^^^^^^^^^^^^
     78 
     79 Take 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 
     95 Example 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 
    109 We can see that Python has loaded ``8173 KiB`` of module data (bytecode and
    110 constants), and that this is ``4428 KiB`` more than had been loaded before the
    111 tests, when the previous snapshot was taken. Similarly, the :mod:`linecache`
    112 module has cached ``940 KiB`` of Python source code to format tracebacks, all
    113 of it since the previous snapshot.
    114 
    115 If the system has little free memory, snapshots can be written on disk using
    116 the :meth:`Snapshot.dump` method to analyze the snapshot offline. Then use the
    117 :meth:`Snapshot.load` method reload the snapshot.
    118 
    119 
    120 Get the traceback of a memory block
    121 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    122 
    123 Code to display the traceback of the biggest memory block::
    124 
    125     import tracemalloc
    126 
    127     # Store 25 frames
    128     tracemalloc.start(25)
    129 
    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))
    138     for line in stat.traceback.format():
    139         print(line)
    140 
    141 Example 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 
    178 We can see that the most memory was allocated in the :mod:`importlib` module to
    179 load data (bytecode and constants) from modules: ``870.1 KiB``. The traceback is
    180 where the :mod:`importlib` loaded data most recently: on the ``import pdb``
    181 line of the :mod:`doctest` module. The traceback may change if a new module is
    182 loaded.
    183 
    184 
    185 Pretty top
    186 ^^^^^^^^^^
    187 
    188 Code to display the 10 lines allocating the most memory with a pretty output,
    189 ignoring ``<frozen importlib._bootstrap>`` and ``<unknown>`` files::
    190 
    191     import linecache
    192     import os
    193     import tracemalloc
    194 
    195     def display_top(snapshot, key_type='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(key_type)
    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"
    208                   % (index, filename, frame.lineno, stat.size / 1024))
    209             line = linecache.getline(frame.filename, frame.lineno).strip()
    210             if line:
    211                 print('    %s' % line)
    212 
    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()
    225     display_top(snapshot)
    226 
    227 Example of output of the Python test suite::
    228 
    229     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
    251 
    252 See :meth:`Snapshot.statistics` for more options.
    253 
    254 
    255 API
    256 ---
    257 
    258 Functions
    259 ^^^^^^^^^
    260 
    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 
    282    The :mod:`tracemalloc` module must be tracing memory allocations to
    283    get the limit, otherwise an exception is raised.
    284 
    285    The limit is set by the :func:`start` function.
    286 
    287 
    288 .. function:: get_traced_memory()
    289 
    290    Get the current size and peak size of memory blocks traced by the
    291    :mod:`tracemalloc` module as a tuple: ``(current: int, peak: int)``.
    292 
    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 
    309 .. function:: start(nframe: int=1)
    310 
    311    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``.
    315 
    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``
    326    command line option can be used to start tracing at startup.
    327 
    328    See also :func:`stop`, :func:`is_tracing` and :func:`get_traceback_limit`
    329    functions.
    330 
    331 
    332 .. function:: stop()
    333 
    334    Stop tracing Python memory allocations: uninstall hooks on Python memory
    335    allocators. Also clears all previously collected traces of memory blocks
    336    allocated by Python.
    337 
    338    Call :func:`take_snapshot` function to take a snapshot of traces before
    339    clearing them.
    340 
    341    See also :func:`start`, :func:`is_tracing` and :func:`clear_traces`
    342    functions.
    343 
    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
    354    the *nframe* parameter of the :func:`start` function to store more frames.
    355 
    356    The :mod:`tracemalloc` module must be tracing memory allocations to take a
    357    snapshot, see the :func:`start` function.
    358 
    359    See also the :func:`get_object_traceback` function.
    360 
    361 
    362 DomainFilter
    363 ^^^^^^^^^^^^
    364 
    365 .. class:: DomainFilter(inclusive: bool, domain: int)
    366 
    367    Filter traces of memory blocks by their address space (domain).
    368 
    369    .. versionadded:: 3.6
    370 
    371    .. attribute:: inclusive
    372 
    373       If *inclusive* is ``True`` (include), match memory blocks allocated
    374       in the address space :attr:`domain`.
    375 
    376       If *inclusive* is ``False`` (exclude), match memory blocks not allocated
    377       in the address space :attr:`domain`.
    378 
    379    .. attribute:: domain
    380 
    381       Address space of a memory block (``int``). Read-only property.
    382 
    383 
    384 Filter
    385 ^^^^^^
    386 
    387 .. class:: Filter(inclusive: bool, filename_pattern: str, lineno: int=None, all_frames: bool=False, domain: int=None)
    388 
    389    Filter on traces of memory blocks.
    390 
    391    See the :func:`fnmatch.fnmatch` function for the syntax of
    392    *filename_pattern*. The ``'.pyc'`` file extension is
    393    replaced with ``'.py'``.
    394 
    395    Examples:
    396 
    397    * ``Filter(True, subprocess.__file__)`` only includes traces of the
    398      :mod:`subprocess` module
    399    * ``Filter(False, tracemalloc.__file__)`` excludes traces of the
    400      :mod:`tracemalloc` module
    401    * ``Filter(False, "<unknown>")`` excludes empty tracebacks
    402 
    403 
    404    .. versionchanged:: 3.5
    405       The ``'.pyo'`` file extension is no longer replaced with ``'.py'``.
    406 
    407    .. versionchanged:: 3.6
    408       Added the :attr:`domain` attribute.
    409 
    410 
    411    .. attribute:: domain
    412 
    413       Address space of a memory block (``int`` or ``None``).
    414 
    415       tracemalloc uses the domain ``0`` to trace memory allocations made by
    416       Python. C extensions can use other domains to trace other resources.
    417 
    418    .. attribute:: inclusive
    419 
    420       If *inclusive* is ``True`` (include), only match memory blocks allocated
    421       in a file with a name matching :attr:`filename_pattern` at line number
    422       :attr:`lineno`.
    423 
    424       If *inclusive* is ``False`` (exclude), ignore memory blocks allocated in
    425       a file with a name matching :attr:`filename_pattern` at line number
    426       :attr:`lineno`.
    427 
    428    .. attribute:: lineno
    429 
    430       Line number (``int``) of the filter. If *lineno* is ``None``, the filter
    431       matches any line number.
    432 
    433    .. attribute:: filename_pattern
    434 
    435       Filename pattern of the filter (``str``). Read-only property.
    436 
    437    .. attribute:: all_frames
    438 
    439       If *all_frames* is ``True``, all frames of the traceback are checked. If
    440       *all_frames* is ``False``, only the most recent frame is checked.
    441 
    442       This attribute has no effect if the traceback limit is ``1``.  See the
    443       :func:`get_traceback_limit` function and :attr:`Snapshot.traceback_limit`
    444       attribute.
    445 
    446 
    447 Frame
    448 ^^^^^
    449 
    450 .. class:: Frame
    451 
    452    Frame of a traceback.
    453 
    454    The :class:`Traceback` class is a sequence of :class:`Frame` instances.
    455 
    456    .. attribute:: filename
    457 
    458       Filename (``str``).
    459 
    460    .. attribute:: lineno
    461 
    462       Line number (``int``).
    463 
    464 
    465 Snapshot
    466 ^^^^^^^^
    467 
    468 .. class:: Snapshot
    469 
    470    Snapshot of traces of memory blocks allocated by Python.
    471 
    472    The :func:`take_snapshot` function creates a snapshot instance.
    473 
    474    .. method:: compare_to(old_snapshot: Snapshot, key_type: str, cumulative: bool=False)
    475 
    476       Compute the differences with an old snapshot. Get statistics as a sorted
    477       list of :class:`StatisticDiff` instances grouped by *key_type*.
    478 
    479       See the :meth:`Snapshot.statistics` method for *key_type* and *cumulative*
    480       parameters.
    481 
    482       The result is sorted from the biggest to the smallest by: absolute value
    483       of :attr:`StatisticDiff.size_diff`, :attr:`StatisticDiff.size`, absolute
    484       value of :attr:`StatisticDiff.count_diff`, :attr:`Statistic.count` and
    485       then by :attr:`StatisticDiff.traceback`.
    486 
    487 
    488    .. method:: dump(filename)
    489 
    490       Write the snapshot into a file.
    491 
    492       Use :meth:`load` to reload the snapshot.
    493 
    494 
    495    .. method:: filter_traces(filters)
    496 
    497       Create a new :class:`Snapshot` instance with a filtered :attr:`traces`
    498       sequence, *filters* is a list of :class:`DomainFilter` and
    499       :class:`Filter` instances.  If *filters* is an empty list, return a new
    500       :class:`Snapshot` instance with a copy of the traces.
    501 
    502       All inclusive filters are applied at once, a trace is ignored if no
    503       inclusive filters match it. A trace is ignored if at least one exclusive
    504       filter matches it.
    505 
    506       .. versionchanged:: 3.6
    507          :class:`DomainFilter` instances are now also accepted in *filters*.
    508 
    509 
    510    .. classmethod:: load(filename)
    511 
    512       Load a snapshot from a file.
    513 
    514       See also :meth:`dump`.
    515 
    516 
    517    .. method:: statistics(key_type: str, cumulative: bool=False)
    518 
    519       Get statistics as a sorted list of :class:`Statistic` instances grouped
    520       by *key_type*:
    521 
    522       =====================  ========================
    523       key_type               description
    524       =====================  ========================
    525       ``'filename'``         filename
    526       ``'lineno'``           filename and line number
    527       ``'traceback'``        traceback
    528       =====================  ========================
    529 
    530       If *cumulative* is ``True``, cumulate size and count of memory blocks of
    531       all frames of the traceback of a trace, not only the most recent frame.
    532       The cumulative mode can only be used with *key_type* equals to
    533       ``'filename'`` and ``'lineno'``.
    534 
    535       The result is sorted from the biggest to the smallest by:
    536       :attr:`Statistic.size`, :attr:`Statistic.count` and then by
    537       :attr:`Statistic.traceback`.
    538 
    539 
    540    .. attribute:: traceback_limit
    541 
    542       Maximum number of frames stored in the traceback of :attr:`traces`:
    543       result of the :func:`get_traceback_limit` when the snapshot was taken.
    544 
    545    .. attribute:: traces
    546 
    547       Traces of all memory blocks allocated by Python: sequence of
    548       :class:`Trace` instances.
    549 
    550       The sequence has an undefined order. Use the :meth:`Snapshot.statistics`
    551       method to get a sorted list of statistics.
    552 
    553 
    554 Statistic
    555 ^^^^^^^^^
    556 
    557 .. class:: Statistic
    558 
    559    Statistic on memory allocations.
    560 
    561    :func:`Snapshot.statistics` returns a list of :class:`Statistic` instances.
    562 
    563    See also the :class:`StatisticDiff` class.
    564 
    565    .. attribute:: count
    566 
    567       Number of memory blocks (``int``).
    568 
    569    .. attribute:: size
    570 
    571       Total size of memory blocks in bytes (``int``).
    572 
    573    .. attribute:: traceback
    574 
    575       Traceback where the memory block was allocated, :class:`Traceback`
    576       instance.
    577 
    578 
    579 StatisticDiff
    580 ^^^^^^^^^^^^^
    581 
    582 .. class:: StatisticDiff
    583 
    584    Statistic difference on memory allocations between an old and a new
    585    :class:`Snapshot` instance.
    586 
    587    :func:`Snapshot.compare_to` returns a list of :class:`StatisticDiff`
    588    instances. See also the :class:`Statistic` class.
    589 
    590    .. attribute:: count
    591 
    592       Number of memory blocks in the new snapshot (``int``): ``0`` if
    593       the memory blocks have been released in the new snapshot.
    594 
    595    .. attribute:: count_diff
    596 
    597       Difference of number of memory blocks between the old and the new
    598       snapshots (``int``): ``0`` if the memory blocks have been allocated in
    599       the new snapshot.
    600 
    601    .. attribute:: size
    602 
    603       Total size of memory blocks in bytes in the new snapshot (``int``):
    604       ``0`` if the memory blocks have been released in the new snapshot.
    605 
    606    .. attribute:: size_diff
    607 
    608       Difference of total size of memory blocks in bytes between the old and
    609       the new snapshots (``int``): ``0`` if the memory blocks have been
    610       allocated in the new snapshot.
    611 
    612    .. attribute:: traceback
    613 
    614       Traceback where the memory blocks were allocated, :class:`Traceback`
    615       instance.
    616 
    617 
    618 Trace
    619 ^^^^^
    620 
    621 .. class:: Trace
    622 
    623    Trace of a memory block.
    624 
    625    The :attr:`Snapshot.traces` attribute is a sequence of :class:`Trace`
    626    instances.
    627 
    628    .. versionchanged:: 3.6
    629       Added the :attr:`domain` attribute.
    630 
    631    .. attribute:: domain
    632 
    633       Address space of a memory block (``int``). Read-only property.
    634 
    635       tracemalloc uses the domain ``0`` to trace memory allocations made by
    636       Python. C extensions can use other domains to trace other resources.
    637 
    638    .. attribute:: size
    639 
    640       Size of the memory block in bytes (``int``).
    641 
    642    .. attribute:: traceback
    643 
    644       Traceback where the memory block was allocated, :class:`Traceback`
    645       instance.
    646 
    647 
    648 Traceback
    649 ^^^^^^^^^
    650 
    651 .. class:: Traceback
    652 
    653    Sequence of :class:`Frame` instances sorted from the oldest frame to the
    654    most recent frame.
    655 
    656    A traceback contains at least ``1`` frame. If the ``tracemalloc`` module
    657    failed to get a frame, the filename ``"<unknown>"`` at line number ``0`` is
    658    used.
    659 
    660    When a snapshot is taken, tracebacks of traces are limited to
    661    :func:`get_traceback_limit` frames. See the :func:`take_snapshot` function.
    662 
    663    The :attr:`Trace.traceback` attribute is an instance of :class:`Traceback`
    664    instance.
    665 
    666    .. versionchanged:: 3.7
    667       Frames are now sorted from the oldest to the most recent, instead of most recent to oldest.
    668 
    669    .. method:: format(limit=None, most_recent_first=False)
    670 
    671       Format the traceback as a list of lines with newlines. Use the
    672       :mod:`linecache` module to retrieve lines from the source code.
    673       If *limit* is set, format the *limit* most recent frames if *limit*
    674       is positive. Otherwise, format the ``abs(limit)`` oldest frames.
    675       If *most_recent_first* is ``True``, the order of the formatted frames
    676       is reversed, returning the most recent frame first instead of last.
    677 
    678       Similar to the :func:`traceback.format_tb` function, except that
    679       :meth:`.format` does not include newlines.
    680 
    681       Example::
    682 
    683           print("Traceback (most recent call first):")
    684           for line in traceback:
    685               print(line)
    686 
    687       Output::
    688 
    689           Traceback (most recent call first):
    690             File "test.py", line 9
    691               obj = Object()
    692             File "test.py", line 12
    693               tb = tracemalloc.get_object_traceback(f())
    694