2016-12-06 12 views
7

私は、ipythonカーネルがやったメモリ(約10)をいくつか(ほぼ10)持っています。私はこれが、私がいくつかの操作の間に生成した可能性のある大きなオブジェクト(行列、リスト、数値配列など)から来ていると思います。今はもう必要ありません。ipythonとjupyterのメモリ使用量を一覧表示する

私は、オブジェクトのすべての私は自分のメモリフットプリントでソートそれらとを定義しましたリストをしたいと思います。それを行う簡単な方法はありますか?特定のタイプについては、nbytesメソッドがありますが、すべてではありません。したがって、私が作成したすべてのオブジェクトとそれらのメモリ占有をリストする一般的な方法を探しています。

+0

'import sys; dir()でxのソートされた([(x、sys.getsizeof(x))、key = lambda x:x [1]、reverse = True) '? – Abdou

+0

[iPythonでオブジェクトのメモリ使用量をチェックする方法は?](http://stackoverflow.com/questions/563840/how-can-i-check-the-memory-usage-of-objects-in -ipython) – amin

+1

重複ではなく、彼は名前を知らないオブジェクトを見つける方法を尋ねています。 @あなたはそれを私が考えている答えにする必要がありますか? –

答えて

15

あなたがipythonjupyterを使用していると仮定すると、あなたがリストを取得するために仕事の少しを行う必要がありますが、オブジェクトのすべてのあなたがが定義されています。つまり、globals()にあるすべてのものを取り除き、modules,builtinsipython objectsなどのオブジェクトを除外することを意味します。これらのオブジェクトがあることが確認できたら、sys.getsizeofでサイズを取得することができます。これは以下のようにまとめることができます。

import sys 

# These are the usual ipython objects, including this one you are creating 
ipython_vars = ['In', 'Out', 'exit', 'quit', 'get_ipython', 'ipython_vars'] 

# Get a sorted list of the objects and their sizes 
sorted([(x, sys.getsizeof(globals().get(x))) for x in dir() if not x.startswith('_') and x not in sys.modules and x not in ipython_vars], key=lambda x: x[1], reverse=True) 

Pythonオブジェクト(Pythonの組み込み関数で作成されたもの)のために、sys.getsizeofは非常に正確になりますのでご注意ください。しかし、サードパーティライブラリを使用して作成されたオブジェクトでは、不正確な場合があります。さらに、sys.getsizeofは、オブジェクトがガベージコレクタによって管理されている場合、追加のガベージコレクタオーバーヘッドを追加することに注意してください。したがって、実際にはより重く見えるものもあります。

注釈として、numpy.nbytesメソッドは、配列オブジェクトの要素以外の属性によって消費されるメモリを含まないという点で、やや誤解を招く可能性があります。

こちらがお役に立てば幸いです。

関連する問題