0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python】tracemallocとpsutilでメモリ監視を行う

Posted at

はじめに

業務で Python のメモリ監視を行う機会があり、その際に使用したライブラリを紹介します。

使用するライブラリ

1. tracemalloc

Python 標準ライブラリです。Python レベルでのメモリ割り当てを監視し、どのコードがどれだけメモリを消費しているかを把握できます。

2. psutil

OS レベルでのメモリ使用量や CPU 利用率を取得するためのライブラリです。

ライブラリ比較

特性 tracemalloc psutil
目的 Pythonのメモリ使用量の追跡 プロセス全体のメモリ使用量の取得
対象 Pythonのメモリ使用量 プロセス全体のメモリ使用量
利用目的 Pythonコードのメモリリークの特定 プロセス全体のメモリ使用状況を確認
ライブラリ区分 標準ライブラリ サードパーティライブラリ

サンプルコード

以下は、10 回のループ内で大量のリストを生成しつつ、メモリの使用状況を毎秒出力するコードです。

import os
import time
import tracemalloc

import psutil

def memory_usage():
    tracemalloc.start()
    process = psutil.Process(os.getpid())

    data = []

    for i in range(10):
        # メモリを消費する処理
        data.extend([x for x in range(1000000)])

        current, peak = tracemalloc.get_traced_memory()

        rss = process.memory_info().rss

        print(
            f"ループ{i + 1}回目: 現在のメモリ使用量: {current / 1024 / 1024:.2f} MB\t"
            f"最大メモリ使用量: {peak / 1024 / 1024:.2f} MB\t"
            f"RSS: {rss / 1024 / 1024:.2f} MB"
        )

        time.sleep(1)
    tracemalloc.stop()

if __name__ == "__main__":
    memory_usage()

実行結果

  • 現在のメモリ使用量と最大メモリ使用量は tracemalloc で取得
  • RSS は psutil で取得
$ python3 tracemalloc_demo.py
ループ1回目: 現在のメモリ使用量: 34.33 MB       最大メモリ使用量: 42.39 MB      RSS: 141.98 MB
ループ2回目: 現在のメモリ使用量: 68.66 MB       最大メモリ使用量: 76.72 MB      RSS: 290.32 MB
ループ3回目: 現在のメモリ使用量: 102.98 MB      最大メモリ使用量: 111.04 MB     RSS: 444.60 MB
ループ4回目: 現在のメモリ使用量: 137.31 MB      最大メモリ使用量: 145.37 MB     RSS: 543.75 MB
ループ5回目: 現在のメモリ使用量: 171.63 MB      最大メモリ使用量: 179.69 MB     RSS: 722.29 MB
ループ6回目: 現在のメモリ使用量: 205.96 MB      最大メモリ使用量: 214.02 MB     RSS: 836.75 MB
ループ7回目: 現在のメモリ使用量: 240.29 MB      最大メモリ使用量: 248.34 MB     RSS: 951.69 MB
ループ8回目: 現在のメモリ使用量: 282.24 MB      最大メモリ使用量: 290.30 MB     RSS: 1066.65 MB
ループ9回目: 現在のメモリ使用量: 308.94 MB      最大メモリ使用量: 316.99 MB     RSS: 1308.43 MB
ループ10回目: 現在のメモリ使用量: 352.80 MB     最大メモリ使用量: 360.86 MB     RSS: 1424.41 MB

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?