注意:这是我第一次尝试使用 Python 进行内存分析,所以也许我在这里问错了问题。建议重新改进问题表示赞赏。
我正在编写一些代码,我需要将几百万个小字符串存储在set
. 据 说,这使用了heapytop
报告的内存量的约 3 倍。我不清楚所有这些额外内存的用途以及我如何才能弄清楚我是否可以 - 如果可以的话如何 - 减少占用空间。
内存测试.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