Memray は、Bloomberg が開発したオープン ソースのメモリ プロファイラです。オープン ソースになってから 1 か月以上が経過し、すでに 8.4k 以上のスターを獲得しています。まさにスター プロジェクトです。今日は、この Python メモリ分析アーティファクトをすべての人にお勧めします。
Memray は、Python コード、ネイティブ拡張モジュール、および Python インタープリター自体のメモリ割り当てを追跡でき、さまざまな種類のレポートを生成して、Python コードのメモリ使用量の分析に役立てることができます。
-
ツールの主な機能: 各関数の呼び出しを追跡し、コール スタックを正確に追跡できます。ローカル スレッド
-
解決に役立つ問題: アプリケーションのメモリ割り当てを分析して、メモリ使用量が多い原因を特定する メモリ リークの原因を特定する 大きなメモリ割り当てを引き起こすコードのホットスポットを特定する
メモリのインストール
-
環境要件: python3.7 以上、Linux システム (Linux システムのみがサポートされています)
-
インストール: pip3 install memray
メモリの使用
memray の使い方のヘルプ
python3 -m memray --help
な
パラメータ |
効果 |
走る |
指定されたアプリケーションを実行し、メモリ使用量を追跡します |
フレームグラフ |
HTML レポートで、フレーム グラフを使用してメモリ使用量を表示します。 |
テーブル |
html レポート ファイルでは、メモリ分析が表形式で表示されます。 |
ライブ |
リアルタイムの画面表示を使用して、さまざまなメモリ使用量を表示します |
木 |
ターミナルでメモリ使用量をツリー構造で表示 |
解析する |
デバッグモードを使用して、各行のメモリ使用量を表示します |
まとめ |
ターミナル実行中のメモリ使用プロファイルを要約します |
統計 |
ターミナルでのメモリ使用量の非常に詳細な表示 |
実行コマンドは使用します
-
python3 -m memray run --help ヘルプを表示する
な
パラメータ |
効果 |
-o OUTPU, --output OUTPUT |
結果の出力先を指定する |
- ライブ |
ライブ トレース セッション モードを開始する |
--ライブリモート |
ライブ トレース セッションを開始し、クライアントが接続するのを待ちます |
--live-port LIVE_PORT, -p LIVE_PORT |
ライブ トレースを開始するときに使用するポート |
- ネイティブ |
C/C++ スタックの追跡 |
--フォローフォーク |
スクリプトによってフォークされた子プロセスの割り当てを追跡する |
--trace-python-アロケーター |
pymalloc アロケータの割り当てを記録する |
-q, --quiet |
実行時にトレース固有の出力を表示しません |
-f, --force |
既存ファイルの強制再購入 |
--compress-on-exit |
追跡が完了した後、lz4 を使用して生成されたファイルを圧縮します。 |
--非圧縮 |
lz4 圧縮なしで生成されたファイル |
-c |
文字列として渡されたプログラム |
-m |
ライブラリ モジュールをスクリプトとして実行する |
-
python3 -m memray run xxx.py はpyファイルのメモリ使用量を直接解析し、カレントパスに「memray-py ファイル名.プロセスID.bin」のメモリ使用量記録ファイルを生成します。もちろん、 -o outFiPath に従って出力パスを指定することもできます。実行中の py ファイルがモジュール コードの場合は、 -m xxx.py を使用して実行することもできます。
な
「memray-py ファイル名.プロセス id.bin」ファイルは、python3 -m memray flamegraph memray-py ファイル名.プロセス id.bin によって html-flame グラフ レポートに変換できます。
な
上の図のように、上から順にプログラムの呼び出し過程を示しており、幅は関数がどれだけのメモリを占有しているかを表しています。
-
python3 -m memray run --native xxxx.py は、Python コードで基礎となる C/C++ 関数を呼び出すことによって消費されるメモリを追跡および分析します
な
な
-
python3 -m memray run --trace-python-allocators xxx.py トレースし、python プログラム メモリ アロケータ pymalloc の状況を分析します。
な
な
これはパラメーターを追加しないことによる効果のように見えますが、実際にはまったく異なります。このように, メモリ割り当ては詳細に追跡されます. Python には 4 つの一般的なメモリ アロケータがあります (malloc, free, realloc, pymalloc). このパラメータは、Python でメモリ オーバーフローが発生した場合に非常に役立ちます. ただし、このパラメーターを追加すると、配送速度が遅くなり、収集されたデータから生成されるファイルが大きくなります。
-
python3 -m memray run --live xxx.py は、トレースされたメモリ データをライブ画面モードで表示します。
な
デフォルトでは、Total memory のデータに従って、大きいものから小さいものへとソートされます; 「O」を押すと、メモリ オブジェクトをプライベート メモリによって大きいものから小さいものへとソートして表示できます; 「A」を押すと、その数に従って高から低へのメモリ割り当て。
この統計データを使用すると、どのオブジェクトが大量のメモリを占有しているか、どのオブジェクトが頻繁にメモリを割り当てられているかをすばやく特定できます。これらのオブジェクトは主要な分析オブジェクトです。
flamegraph コマンド --- フレーム グラフ レポートを生成する
-
python3 -m memray flamegraph --help ヘルプを表示
-
python3 -m memray flamegraph xxx.bin フレームグラフを生成
table コマンド -- テーブル レポートを生成する
-
python3 -m memray table --help ヘルプを取得する
-
python3 -m memray table xxxx.bin は、bin ファイルをテーブル レポートに変換します。
な
tree コマンド -- ツリー レポートを生成する
-
python3 -m memray tree --help ヘルプを取得する
-
python3 -m memray tree xxxx.bin は、bin ファイルをツリー レポートに変換します。
な
summary コマンド -- 要約レポートを生成します
-
python3 -m memray summary --help ヘルプを表示
-
python3 -m memray summary xxxx.bin bin ファイルを分析し、要約レポートを生成します
な
stats コマンド --- 詳細な統計レポートを生成します
-
python3 -m memray stats --help ヘルプ
-
python3 -m memray stats xxxx.bin bin ファイルを分析し、詳細なレポートを生成します
な