注意: これは、Python を使用したメモリ プロファイリングへの私の最初の進出であるため、ここで間違った質問をしている可能性があります。質問を改善するためのアドバイスをいただければ幸いです。
数百万の小さな文字列をset
. によると、これはheapytop
によって報告されるメモリ量の約 3 倍を使用しています。この余分なメモリがすべて何に使用されているのか、フットプリントを削減できるかどうか、また削減できる場合はどのように削減できるかをどのように判断できるかは明確ではありません。
memtest.py:
from guppy import hpy
import gc
hp = hpy()
# do setup here - open files & init the class that holds the data
print 'gc', gc.collect()
hp.setrelheap()
raw_input('relheap set - enter to continue') # top shows 14MB resident for python
# load data from files into the class
print 'gc', gc.collect()
h = hp.heap()
print h
raw_input('enter to quit') # top shows 743MB resident for python
出力は次のとおりです。
$ python memtest.py
gc 5
relheap set - enter to continue
gc 2
Partition of a set of 3197065 objects. Total size = 263570944 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 3197061 100 263570168 100 263570168 100 str
1 1 0 448 0 263570616 100 types.FrameType
2 1 0 280 0 263570896 100 dict (no owner)
3 1 0 24 0 263570920 100 float
4 1 0 24 0 263570944 100 int
要約すると、heapy は 264MB を示し、top は 743MB を示します。余分な 500MB は何に使われていますか?
更新:
Windows 7 の VirtualBox の Ubuntu 12.04 で 64 ビット Python を実行しています。ここ
の回答に従って guppy をインストールしました:
sudo pip install https://guppy-pe.svn.sourceforge.net/svnroot/guppy-pe/trunk/guppy