这个问题已经被问过几次了,我已经尝试了一些方法。不幸的是,我不知道为什么我的python进程会使用这么多内存。
我的设置:python 3.5.2,Windows 10和许多第三方程序包。
该进程的实际内存使用量为300 MB(太多了,但有时甚至会激增至32gb)
process = psutil.Process(os.getpid())
memory_real = process.memory_info().rss/(1024*1024) #--> 300 Mb
到目前为止我尝试过的事情:
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')
print("[ Top 10 ]")
for stat in top_stats[:10]:
log_and_print(stat)
结果只产生了几个Mb gc.collect()
import objgraph
objgraph.show_most_common_types()
返回:
function 51791
dict 32939
tuple 28825
list 13823
set 10748
weakref 10551
cell 7870
getset_descriptor 6276
type 6088
OrderedDict 5083
(当进程有200 mb时,上述数字甚至更高)因此很难找到一种分配进程内存的方法。我做错什么了吗,还是有一些简单的方法可以找出正在发生的事情?
PS: 我能够通过运气解决这个问题。这是一个错误编码的while循环,它在没有适当中断条件的情况下扩展了列表。 无论如何,有一种方法可以找到这种内存泄漏。我经常看到的是一些内存分析程序包被显式调用。在这种情况下,由于永远不会离开循环,因此我将没有机会进行内存转储或检查主线程中的内存。