203
156

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Jupyter(IPython)上でメモリ食っている変数を探し出して削除する

Last updated at Posted at 2017-01-03

メモリ食ってる変数を確認・削除したい

Jupyter(IPython)上でデータ解析などを行っていると、データがメモリ上にどんどん蓄積されていくので、メモリを食っている変数を確認したくなる。
そのような時に以下のコマンドを実行すると、変数とその変数のメモリ容量を一覧にして表示してくれる。

Python2
import sys

print "{}{: >25}{}{: >10}{}".format('|','Variable Name','|','Memory','|')
print " ------------------------------------ "
for var_name in dir():
    if not var_name.startswith("_"):
        print "{}{: >25}{}{: >10}{}".format('|',var_name,'|',sys.getsizeof(eval(var_name)),'|')
Python3
import sys

print("{}{: >25}{}{: >10}{}".format('|','Variable Name','|','Memory','|'))
print(" ------------------------------------ ")
for var_name in dir():
    if not var_name.startswith("_"):
        print("{}{: >25}{}{: >10}{}".format('|',var_name,'|',sys.getsizeof(eval(var_name)),'|'))

出力結果は以下のような感じになる。


スクリーンショット 2017-01-03 17.34.11.png * * *

しかしこのコマンドだとJupyter上で定義している全ての変数の結果が出力されてしまうので、例えば「メモリ容量がある一定の値以上の変数だけを取り出してほしい」と思ったら以下のようにアレンジする。

Python2
import sys

print "{}{: >25}{}{: >10}{}".format('|','Variable Name','|','Memory','|')
print " ------------------------------------ "
for var_name in dir():
    if not var_name.startswith("_") and sys.getsizeof(eval(var_name)) > 10000: #ここだけアレンジ
        print "{}{: >25}{}{: >10}{}".format('|',var_name,'|',sys.getsizeof(eval(var_name)),'|')
Python3
import sys

print("{}{: >25}{}{: >10}{}".format('|','Variable Name','|','Memory','|'))
print(" ------------------------------------ ")
for var_name in dir():
    if not var_name.startswith("_") and sys.getsizeof(eval(var_name)) > 10000: #ここだけアレンジ
        print("{}{: >25}{}{: >10}{}".format('|',var_name,'|',sys.getsizeof(eval(var_name)),'|'))

すると、


スクリーンショット 2017-01-03 17.39.00.png

この通り、メモリ容量が大きい変数だけを抽出することが出来る。

ここまで出来たらあとは、

del U_Global, V_Global

のように、いらない変数を指定して削除していったらいい。
メモリを開放して、快適にJupyter(IPython)上で解析を継続することが出来る。

備考

タイトルでは「Jupyter(IPython)上で」と銘打っていますが、他のインターフェースでも恐らく同じように表示してくれるかと思います。
ただし、str.format()を使用しているため、正しく出力されるにはPython2.6以上である必要があります。

参考URL

203
156
1

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
203
156

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?