A low-overhead Python tracer that records function calls and visualizes code execution as an interactive timeline.
P403n1x87/austin
A low-overhead, zero-instrumentation frame stack sampler for CPython, written in C, for profiling running Python processes.
- Stars
- 2,212
- Forks
- 68
- Open issues
- 10
- Last commit
- 9 days ago
What is it?
Austin samples the call stacks of running CPython processes by reading the interpreter's memory from outside the process. It needs no code changes or instrumentation, so it can be attached to a live application, including in production, to see where time or memory is being spent.
Its output is a compact binary format called MOJO, which can be converted to collapsed stacks for FlameGraph, Speedscope JSON, or Google pprof. It also works with multi-process applications such as mod_wsgi, can sample garbage collector state, and offers a 'where' mode that dumps the current stacks of all threads in a process. Austin is distributed as a single C binary and supports Python 3.9 through 3.14 on Linux, Windows, and macOS.
Key features
- 01Samples CPython stacks by reading interpreter memory, with no code instrumentation.
- 02Supports time profiling, memory profiling, and a combined full mode.
- 03Follows child processes and samples sub-interpreters.
- 04Outputs MOJO binary data convertible to FlameGraph, Speedscope, and pprof formats.
- 05Includes a where mode that dumps all thread stacks of a running process.
- 06Ships as a single C binary with no third-party dependencies.
Use cases
- Finding performance bottlenecks in a Python application without modifying its code.
- Profiling a live production service or a long-running script with minimal overhead.
- Profiling multi-process web deployments such as Apache mod_wsgi workers.
- Generating flame graphs from Python programs to compare where CPU or memory time goes.
Quick start
- 1
Install Austin from PyPI with pip
pip install austin-dist - 2
Run austin with the command or -p PID option to sample a Python process; see the usage help for options
Things to know
- Only profiles CPython processes.
- Licensed under GPL-3.0, a copyleft license that may restrict how you can reuse the code.
Topics
FAQ
- What is austin?
- A low-overhead, zero-instrumentation frame stack sampler for CPython, written in C, for profiling running Python processes. Austin samples the call stacks of running CPython processes by reading the interpreter's memory from outside the process. It needs no code changes or instrumentation, so it can be attached to a live application, including in production, to see where time or memory is being spent.
- Is austin free to use? What license does it have?
- austin is open source under the GPL-3.0 license. Check the license terms before using it in commercial products.
- Is austin still maintained?
- Actively maintained. The last commit to austin was on Oct 28, 2026.
- What can I use austin for?
- Finding performance bottlenecks in a Python application without modifying its code. Profiling a live production service or a long-running script with minimal overhead. Profiling multi-process web deployments such as Apache mod_wsgi workers. Generating flame graphs from Python programs to compare where CPU or memory time goes.
- How do I install austin?
- Install Austin from PyPI with pip: pip install austin-dist Run austin with the command or -p PID option to sample a Python process; see the usage help for options
- Where can I get austin?
- The source code and installation instructions are on GitHub: https://github.com/P403n1x87/austin
Summary generated by AI from the project's README. GitHub stats refresh daily.
Related projects
A Rust-based flamegraph generator that profiles Cargo projects or any binary using perf, xctrace, or dtrace/blondie, without Perl.
A memory profiler for Python that tracks allocations in Python code, native extensions, and the interpreter, with several report types.
Line-by-line profiler for Python that shows how much time each source line of a decorated function takes.
A command-line and web tool for visualizing and analyzing profiling data in the profile.proto format.
A live profiler and inspection UI for Django that records requests, SQL queries and code blocks to help find slow spots.