Her*_*ezy 6 python memory-leaks memory-management python-2.7
我有一个非常简单的脚本,它分配内存,dels唯一引用一个相当大的对象,一直打印heapy和pidstat报告.在运行脚本之后,heapy告诉我,当pidstat告诉我相反时,不应该使用太多内存:
from guppy import hpy
import time
import sys
import os
'''
1) print heapy and pidstat report after starting and before actually doing any work
2) allocate some memory in a simple 2d array
3) print heapy and pidstat report
4) del the d2 array (attempt at garbage collection)
5) print heapy and pidstat report
6) sleep so pidstat can continue to be run to check on memory
'''
def pidstat(msg):
print '==============================='
print msg
os.system('pidstat -r -p %s' % os.getpid())
print '+++++++++++++++++++++++++++++++'
print hpy().heap()[0]
print '==============================='
pidstat('before doing anything')
docs = []
for doc in range(0, 10000):
docs.append([j for j in range(0, 1000)])
pidstat('after fetching all the docs into memory')
del docs
pidstat('after freeing the docs')
time.sleep(60)
Run Code Online (Sandbox Code Playgroud)
输出如下:
===============================
before doing anything
Linux 2.6.38-15-generic (hersheezy) 08/14/2012 _x86_64_ (4 CPU)
01:05:20 PM PID minflt/s majflt/s VSZ RSS %MEM Command
01:05:20 PM 5360 0.44 0.00 44768 9180 0.11 python
+++++++++++++++++++++++++++++++
Partition of a set of 19760 objects. Total size = 1591024 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 19760 100 1591024 100 1591024 100 str
===============================
===============================
after fetching all the docs into memory
Linux 2.6.38-15-generic (hersheezy) 08/14/2012 _x86_64_ (4 CPU)
01:05:21 PM PID minflt/s majflt/s VSZ RSS %MEM Command
01:05:21 PM 5360 8.95 0.00 318656 279120 3.49 python
+++++++++++++++++++++++++++++++
Partition of a set of 7431665 objects. Total size = 178359960 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 7431665 100 178359960 100 178359960 100 int
===============================
===============================
after freeing the docs
Linux 2.6.38-15-generic (hersheezy) 08/14/2012 _x86_64_ (4 CPU)
01:05:29 PM PID minflt/s majflt/s VSZ RSS %MEM Command
01:05:29 PM 5360 40.23 0.00 499984 460480 5.77 python
+++++++++++++++++++++++++++++++
Partition of a set of 19599 objects. Total size = 1582016 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 19599 100 1582016 100 1582016 100 str
===============================
如何确保将此内存返回给操作系统?
内存可供python进程内重用的时间和内存释放给操作系统的时间可能有所不同。特别是,标准 Python 解释器 (CPython) 为特定类型的对象维护自己的池和空闲列表。它将重用这些池本身中的内存,但一旦使用它就永远不会将其释放给操作系统。
请参阅此了解更多详细信息。
| 归档时间: |
|
| 查看次数: |
2177 次 |
| 最近记录: |