配置文件内存。查找循环中的内存泄漏

时间:2018-11-03 23:15:59

标签: python python-3.x memory-leaks out-of-memory profile

这个问题已经被问过几次了,我已经尝试了一些方法。不幸的是,我不知道为什么我的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

到目前为止我尝试过的事情:

  • 内存行分析器(没有帮助我)
  • tracemalloc.start(50),然后
    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时,上述数字甚至更高)
  • pympler:进程存在某些错误代码

因此很难找到一种分配进程内存的方法。我做错什么了吗,还是有一些简单的方法可以找出正在发生的事情?

PS: 我能够通过运气解决这个问题。这是一个错误编码的while循环,它在没有适当中断条件的情况下扩展了列表。 无论如何,有一种方法可以找到这种内存泄漏。我经常看到的是一些内存分析程序包被显式调用。在这种情况下,由于永远不会离开循环,因此我将没有机会进行内存转储或检查主线程中的内存。

0 个答案:

没有答案