作成日
2019/08/20最終更新
2022/01/31記事区分
一般公開メモリリーク時に JVM の jmap や C/C++ の Valgrind で調査できるのと同様に、Python では objgraph が便利です。
sudo apt install graphviz
python -m pip install xdot
python -m pip install objgraph
タイプ毎にオブジェクト数を表示
sample.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
from objgraph import show_most_common_types
class MyBigFatObject(object):
pass
def Main():
obj = MyBigFatObject()
show_most_common_types(limit=999)
if __name__ == '__main__':
Main()
出力例
$ python sample.py | grep MyBigFatObject
MyBigFatObject 1
あるタイプのオブジェクト数を表示
#!/usr/bin/python
# -*- coding: utf-8 -*-
from objgraph import count
class MyBigFatObject(object):
pass
def Main():
obj = MyBigFatObject()
print count('MyBigFatObject') #=> 1
if __name__ == '__main__':
Main()
増加したオブジェクトを表示
最後に growth/show_growth
した時点からの、オブジェクトの増加数を表示できます。
sample.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
from objgraph import growth
from objgraph import show_growth
class MyBigFatObject(object):
pass
def Main():
growth()
growth()
obj = MyBigFatObject()
show_growth(limit=999)
if __name__ == '__main__':
Main()
出力例
$ python sample.py
frame 5 +1
MyBigFatObject 1 +1
オブジェクトの参照状況を可視化
sample.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
from objgraph import show_refs
class MyBigFatObject(object):
pass
def Main():
x = [1, {'mykey': 'myval'}]
for i in range(2):
x.append(MyBigFatObject())
show_refs([x], filename='sample-graph.png')
if __name__ == '__main__':
Main()
出力例
関連記事
- Python コードスニペット (条件分岐)if-elif-else sample.py #!/usr/bin/python # -*- coding: utf-8 -*- # コメント内であっても、ASCII外の文字が含まれる場合はエンコーディング情報が必須 x = 1 # 一行スタイル if x==0: print 'a' # 参考: and,or,notが使用可能 (&&,||はエラー) elif x==1: p...
- Python コードスニペット (リスト、タプル、ディクショナリ)リスト range 「0から10まで」といった範囲をリスト形式で生成します。 sample.py print range(10) # for(int i=0; i<10; ++i) ← C言語などのfor文と比較 print range(5,10) # for(int i=5; i<10; ++i) print range(5,10,2) # for(int i=5; i<10;...
- ZeroMQ (zmq) の Python サンプルコードZeroMQ を Python から利用する場合のサンプルコードを記載します。 Fixing the World To fix the world, we needed to do two things. One, to solve the general problem of "how to connect any code to any code, anywhere". Two, to wra...
- Matplotlib/SciPy/pandas/NumPy サンプルコードPython で数学的なことを試すときに利用される Matplotlib/SciPy/pandas/NumPy についてサンプルコードを記載します。 Matplotlib SciPy pandas [NumPy](https://www.numpy
- pytest の基本的な使い方pytest の基本的な使い方を記載します。 適宜参照するための公式ドキュメントページ Full pytest documentation API Reference インストール 適当なパッケージ