Memray

Die Speichernutzung ist in Python-Projekten nur schwer zu kontrollieren, da die Sprache nicht explizit deutlich macht, wo Speicher zugewiesen wird, Modulimporte können den Verbrauch erheblich steigern, und es ist nur allzu leicht, eine Datenstruktur zu erstellen, die versehentlich unbegrenzt wächst. Data-Science-Projekte sind besonders anfällig für hohen Speicherverbrauch, da sie meist viele große Abhängigkeiten wie NumPy importieren, selbst wenn diese nur an wenigen Stellen verwendet werden.

Memray hilft euch, die Speichernutzung eures Programms zu verstehen, wobei nachverfolgt wird, wo während der Programmausführung Speicher zugewiesen und freigegeben wird. Diese Daten können dann auf verschiedene Weise dargestellt werden, u. a. werden in Flame Graphs die Stacktraces in einem Diagramm zusammengefasst, wobei die Balkenbreite die Größe der Speicherzuweisung darstellt.

Mit memray run kann jeder Python-Befehl profiliert werden. Für die meisten Projekte empfiehlt sich, zunächst mit check die Funktion zu profilieren, die euer Projekt lädt. Damit wird der Mindestaufwand überprüft, der zum Starten eurer Anwendung erforderlich ist, z.B.:

$ uv run memray run src/items/__init__.py check
Writing profile results into src/items/memray-__init__.py.72633.bin
[memray] Successfully generated profile results.

You can now generate reports from the stored allocation records.
Some example commands to generate reports:

/Users/veit/items/.venv/bin/python3 -m memray flamegraph src/items/memray-__init__.py.72633.bin

Der Befehl gibt die Meldung Successfully generated profile results. aus und erstellt eine Datei PROCESS-ID.bin-Datei. Den Flame Graph können wir dann erstellen mit:

$ uv run python -m memray flamegraph src/items/memray-__init__.py.72633.bin
Wrote src/items/memray-flamegraph-__init__.py.72633.html

Tipp

In vielen Konsolen könnt ihr die beiden Befehle zusammenfassen mit &&:

$ uv run memray run src/items/__init__.py check && uv run python -m memray flamegraph src/items/memray-__init__.py.72633.bin

Das Ergebnis ist folgende HTML-Datei:

memray flamegraph report

memray flamegraph report

Der Kopfbereich der Seite enthält einige Steuerelemente, :abbr: u.a. (unter anderem) zu

Memory Graph

Anzeige des Speicherplatzes eines Prozesses im Arbeitsspeicher (Resident set size) und des dynamischen Speichers (Heap Memory) über die Zeit

Stats

Speicherstatistiken, in diesem Fall

Command line: /Users/veit/items/.venv/bin/memray run src/items/api.py check
Start time: Sun Feb 08 2026 12:12:27 GMT+0100 (Central European Standard Time)
End time: Sun Feb 08 2026 12:12:27 GMT+0100 (Central European Standard Time)
Duration: 0:00:00.068000
Total number of allocations: 11142
Total number of frames seen: 0
Peak memory usage: 4.6 MB
Python allocator: pymalloc

Darunter befindet sich der Flame-Graph als Eiszapfendiagramm mit den Speicherzuweisungen über die Zeit, wobei der letzte Aufruf ganz unten steht. Die Grafik zeigt die zu einem bestimmten Zeitpunkt ausgeführte Codezeile an wobei die Breite proportional zur zugewiesenen Speichermenge ist; bewegt ihr die Maus darüber, seht ihr weitere Details wie Dateiname, Zeilennummer, zugewiesener Speicher und Anzahl der Zuweisungen.

Tipp

Mit pytest-memray gibt es auch ein Plugin für pytest, mit dem ihr überprüfen könnt, ob von euch festgelegte Obergrenzen für den Speicherverbrauch und Speicherlecks eingehalten werden.