pythonでメモリ使用量計測

memory_profilerを使用してメモリ使用量を計測する方法についてまとめています。
なお,こちらで紹介しているコードには誤りが含まれる可能性があります。内容やコードについてお気づきの点等ございましたら,ご指摘いただけると幸いです。
(本ページにて紹介しているコードはgithubにて公開しています。)

DataAnalOji.hatena.sample/python_samples/blog_memory_usage.py at master · Data-Anal-Ojisan/DataAnalOji.hatena.sample
samples for my own blog. Contribute to Data-Anal-Ojisan/DataAnalOji.hatena.sample development by creating an account on GitHub.

memory_profilerのインストール

※2020年5月25日時点の最新版(0.57)をインストールした場合は,後述のメモリ使用量増減(Increment)の内,減少分が正常に表示されないので0.52をインストールすること。詳しくはこちら

$ pip install -U memory-profiler==0.52

memory_profiler の使用

from memory_profiler import profile

@profile
def my_func():
    a = [1] * (10 ** 6)
    b = [2] * (2 * 10 ** 7)
    del b
    return a

if __name__ == '__main__':
    my_func()

メモリ使用量を解析したい処理を「@profile」で修飾し,python のスクリプト(上記コード:blog_memory_usage.py)を実行することで出力にプロファイル結果が得られます。出力内容は左から「プログラムの行数」「該当行におけるメモリの使用量」「該当行におけるメモリ使用量の増減」「対応するコード」となっている模様。

$ python -m memory_profiler blog_memory_usage.py
Filename: blog_memory_usage.py
Line #    Mem usage    Increment   Line Contents
================================================
 8         40.1 MiB     40.1 MiB   @profile
 9                                 def my_func():
10         47.7 MiB      7.6 MiB       a = [1] * (10 ** 6)
11        200.3 MiB    152.6 MiB       b = [2] * (2 * 10 ** 7)
12         47.7 MiB   -152.6 MiB       del b
13         47.7 MiB      0.0 MiB       return a

プロファイル結果のプロット

 python スクリプトを「mprof run」コマンドで実行。

$ mprof run blog_memory_usage.py
mprof: Sampling memory every 0.1s
running as a Python program...
Filename: blog_memory_usage.py

Line #    Mem usage    Increment   Line Contents
================================================
 8         40.1 MiB     40.1 MiB   @profile
 9                                 def my_func():
10         47.7 MiB      7.6 MiB       a = [1] * (10 ** 6)
11        200.3 MiB    152.6 MiB       b = [2] * (2 * 10 ** 7)
12         47.7 MiB   -152.6 MiB       del b
13         47.7 MiB      0.0 MiB       return a

実行完了後,「mprof plot」コマンドで結果をグラフで確認できます。

$ mprof plot
Using last profile data.

コメント