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.


コメント