メインコンテンツまでスキップ

extend-troubleshooting-oom-python

Last updated on February 4, 2026

注釈:本資料はAI技術を用いて翻訳されています。

注記

この記事はローカル開発のみを対象としています。

Pythonはガベージコレクタを使用してメモリを自動的に管理します。しかし、開発者がメモリ使用量に注意を払う必要がなくなるわけではありません。メモリ問題の一般的な原因には以下が含まれます:

  • 非効率的なデータ構造
  • 大きなオブジェクトへの参照を必要以上に長く保持すること
  • メモリリーク

メモリプロファイリング

メモリプロファイリングは、Pythonプログラムのメモリ消費を理解し最適化するのに役立ちます。以下は、メモリプロファイリングに役立つ重要なツールとテクニックです:

  1. memory_profiler

    プロセスのメモリ消費を監視し、Pythonプログラムのメモリ消費を行ごとに分析するためのPythonモジュールです。

    • インストール:
    pip install memory_profiler
    • 使用方法:
    mprof run python script.py
    mprof plot

    または

    # script.py

    import memory_profiler

    @memory_profiler.profile
    def my_function(a, b, c):
    ...
  2. objgraph

    Pythonオブジェクトグラフを視覚的に探索できるモジュールです。

    • インストール:

    Graphvizが必要です。

    pip install objgraph
    • 使用方法:
    # script.py

    import objgraph

    # foo = my_function(a, b, c)
    objgraph.show_refs([foo], filename="objgraph.png")
  3. Guppy 3 - Heapy *

    Pythonプログラムのメモリ関連の問題に関するデバッグと最適化をサポートします。

    • インストール:
    pip install guppy3
    • 使用方法:
    # script.py

    import guppy

    h = guppy.hpy()
    print(h.heap())

CPUプロファイリング

CPUプロファイリングは主に実行時間のパフォーマンスボトルネックの特定に焦点を当てていますが、コードを最適化することでメモリ使用量の管理に間接的に役立ちます。以下はいくつかのツールとテクニックです:

  1. cProfile and profile

    Pythonプログラムの決定論的プロファイリングを提供します。

    • 使用方法:
    # script.py

    import cProfile

    cProfile.run("my_function(a, b, c)")
    # script.py

    import profile

    profile.run("my_function(a, b, c)")
  2. Line Profiler

    関数の行ごとのプロファイリングを行うためのモジュールです。

    • インストール:
    pip install line_profiler
    • 使用方法:
    # script.py

    import line_profiler

    @line_profiler.profile
    def my_function(a, b, c):
    ...
    kernprof -l -v script.py
    python -m line_profiler script.py.lprof

ベストプラクティス

ベストプラクティスに従うことで、メモリ不足(OOM)の問題を大幅に軽減できます。以下はいくつかの重要な戦略です:

  1. ジェネレータとイテレータを使用する。

    • ジェネレータとイテレータは、すべてを一度にメモリにロードすることなく大量のデータを処理するのに役立ちます。
  2. 適切なデータ構造を選択する。

    • 例:リストの代わりにcollectionsdequeをキュー操作に使用する。
  3. グローバル変数の使用を制限する。

  4. 効率的なライブラリを使用する。

    • 例:数値演算にはnumpyを、データ操作にはpandasを使用する。

まとめ

Pythonでメモリ不足の問題を回避するには、メモリ管理の理解、プロファイリングツールの使用、そしてベストコーディングプラクティスに従うことが必要です。これらの戦略を統合して、メモリ集約的なタスクを効果的に処理する効率的なアプリケーションを構築してください。定期的なプロファイリング、慎重なコーディング、そして適切なデータ構造の選択が、最適なメモリ使用量にとって重要です。