Bloombergで開発され、現在はオープンソースであるMemrayはメモリプロファイラである。これにより、ネイティブ拡張機能を含むPythonコードとPythonインタープリター自体のメモリ割り当てを追跡できる。
メモリプロファイリングは、プログラムによってメモリがどのように使われているかを理解できる非常に強力な手法である。それによって、メモリリークを検出したり、プログラムのどの部分が最もメモリ使用量を増やしているかを理解できるようになる。
Memrayでは、py-spyなどのメモリプロファイラーのサンプリングと異なり、C/C++ライブラリへの呼び出しを含むすべての関数呼び出しをトレースできる。そして、呼び出しスタックの詳細情報を閲覧できるようになる。Bloombergによるとパフォーマンスを犠牲にすることなく、プロファイリングについては解釈されたコードの実行速度低下が最小限に抑えられる。ただし、ネイティブコードのプロファイリングは遅くなる傾向があるが、明示的に有効にする必要がある。
Memrayでは、フレームグラフなど、収集されたメモリ使用量データに関するさまざまな種類のレポートを生成できる。これは、最もよく通るコードパスをすばやく正確に特定する役に立つ。
EgdeDBの共同創設者兼CEOであるYury Selivanov氏によると、このツールにより、Pythonプログラムに対して以前は得ることができなかったユニークな分析を得ることができる。
このツールは、Pythonで実装された長時間実行されるサービスに必須です。Memrayにより、フレームチャートやすべての割り当てを視覚化し、すべてを完全に追跡できます。
Memrayは、Pythonプログラムを実行およびプロファイリングするためのコマンドラインツールとして使用できる。
$ python3 -m memray run -o output.bin my_script.py
$ python3 -m memray flamegraph output.bin
または、pytest-memray
を使ってMemrayをテストスイートに統合することもできる。
さらに、--native
コマンドラインオプションを使ってすべてのC/C++呼び出しのプロファイルを作成したり、--live
オプションを使ってプログラムの実行中にリアルタイムでメモリ割り当てを検査したりできる。
MemrayにはLinux x86/64ボックスが必要であり、python3 -m pip install memray
を使ってインストールできる。