Pyflame is a high performance profiling tool that generates flame graphs for Python. Pyflame is implemented in C++, and uses the Linux ptrace(2) system call to collect profiling information. It can take snapshots of the Python call stack without explicit instrumentation, meaning you can profile a program without modifying its source code. Pyflame is capable of profiling embedded Python interpreters like uWSGI. It fully supports profiling multi-threaded Python programs.
Pyflame usually introduces significantly less overhead than the builtin
profile (or cProfile) modules, and emits richer profiling data. The
profiling overhead is low enough that you can use it to profile live processes
in production.
Full Documentation: https://pyflame.readthedocs.io
For Debian/Ubuntu, install the following:
# Install build dependencies on Debian or Ubuntu.
sudo apt-get install autoconf automake autotools-dev g++ pkg-config python-dev python3-dev libtool makeOnce you have the build dependencies installed:
./autogen.sh
./configure
makeThe make command will produce an executable at src/pyflame that you can run
and use.
Optionally, if you have virtualenv installed, you can test the executable you
produced using make check.
The full documentation for using Pyflame is here. But here's a quick guide:
# Attach to PID 12345 and profile it for 1 second
pyflame -p 12345
# Attach to PID 768 and profile it for 5 seconds, sampling every 0.01 seconds
pyflame -s 5 -r 0.01 -p 768
# Run py.test against tests/, emitting sample data to prof.txt
pyflame -o prof.txt -t py.test tests/In all of these cases you will get flame graph data on stdout (or to a file if
you used -o). This data is in the format expected by flamegraph.pl, which
you can find here.
The full FAQ is here.
Full
answer
here.
tl;dr: use the -x flag to suppress (idle) output.
See here.
Use the --threads option.
Yes, use the -d option.

