我有几个在我的计算机上运行的python脚本计划任务(不是所述计算机上的管理员-因此我无法使用perfmon或其他系统工具更深入地研究)。每天,我看到系统内存使用率一直在稳定增长(占16GB RAM的7%),我怀疑代码中可能存在内存泄漏。
我的机器完全重新启动会导致内存清除。大约9-10天后,我的系统内存再次用完,需要重新启动。
每个脚本的功能大致相同:
在处理完各个对象之后,我将其删除为:
del (sample_df, previous_df)
在脚本的结尾,我还将包括以下代码以捕获我错过的所有全局变量并手动运行垃圾收集器:
for name in dir():
if not name.startswith('_'):
del globals()[name]
import gc
gc.collect()
我已尝试使用Pympler软件包及其.tracker功能,并且在脚本运行结束时
tracker.print_diff()
在内存中产生以下似乎被垃圾收集器未收集的对象(左?):
types | # objects | total size
list | 19018 | 968.68 KB
str | 19025 | 862.44 KB
int | 1122 | 13.15 KB
运行垃圾收集器后,我还查看了仍在本地名称空间中的项目的内存使用情况:
import sys
for var, obj in locals().items():
print var, sys.getsizeof(obj)
返回:
__ 36
__builtin__ 28
SummaryTracker 452
gc 28
__package__ 8
_i11 78
__doc__ 85
_i 66
__file__ 208
_sh 28
name 23
_7 256
_6 36
_3 3212
_2 36
_i13 190
_i12 66
_iii 66
_i10 66
_oh 140
_dh 40
_i9 110
_i8 390
_i7 36
_i6 32
_i5 390
_i4 190
_i3 42
_i2 38
_i1 390
tracker 32
__builtins__ 28
sys 28
__name__ 29
___ 3212
_ 256
_ii 78
_ih 100
“ ___”对象似乎正在使用适当的内存,但我不知道它来自何处。
我已经尝试了尽可能多的故障排除。预先感谢您的帮助。