Jupyter Integration

We provide an IPython extension that adds a new Jupyter cell magic. This lets you create Memray flame graphs directly in Jupyter notebooks.

memray_flamegraph

To load our IPython plugin, you simply need to run:

%load_ext memray

Once it’s loaded, you’ll have access to the %%memray_flamegraph cell magic. You can fill a Jupyter cell with %%memray_flamegraph on its own line, followed by some code whose memory usage you want to profile. Memray will run that cell’s code, tracking its memory allocations, and then display a flame graph directly in Jupyter for you to analyze.

It’s also possible to provide arguments on the %%memray_flamegraph line. For instance, %%memray_flamegraph --trace-python-allocators --leaks would let you look for memory not freed by the code in the cell:

%%memray_flamegraph --trace-python-allocators --leaks
def a():
    return "a" * 10_000

def bc():
    return "bc" * 10_000

x = a() + bc()

Arguments

usage: %%memray_flamegraph [-h] [--native] [--follow-fork] [--trace-python-allocators]
                           [--leaks | --temporary-allocation-threshold N | --temporary-allocations]
                           [--temporal] [--split-threads] [--inverted]
                           [--max-memory-records MAX_MEMORY_RECORDS]

Named Arguments

--native

Track native (C/C++) stack frames as well

Default: False

--follow-fork

Record allocations in child processes forked from the tracked script

Default: False

--trace-python-allocators

Record allocations made by the pymalloc allocator

Default: False

--leaks

Show memory leaks, instead of peak memory usage

Default: False

--temporary-allocation-threshold

Report temporary allocations, as opposed to leaked allocations or high watermark allocations. An allocation is considered temporary if at most N other allocations occur before it is deallocated. With N=0, an allocation is temporary only if it is immediately deallocated before any other allocation occurs.

Default: -1

--temporary-allocations

Equivalent to --temporary-allocation-threshold=1

--temporal

Generate a dynamic flame graph that can analyze allocations in a user-selected time range.

Default: False

--split-threads

Do not merge allocations across threads

Default: False

--inverted

Invert the flame graph: use allocators as roots instead of thread entry points

Default: False

--max-memory-records

Maximum number of memory records to display