Python heapy显示了常量的内存使用情况,但是10GB内有60GB的ram耗尽

时间:2017-04-08 19:11:04

标签: python python-2.7 memory tensorflow heapy

我正在运行张量流模型,在处理大图像的同时,在大约10分钟内耗尽了60G的RAM。

我运行Heapy尝试确定泄漏,但很多只显示内存使用量的90M并保持不变。

我注意到这篇文章:{{3}}

这表明问题可能出在内存碎片的python(这里是2.7)。但对于这种情况,这听起来并不合理。

  • 我有2个python队列。在一个我从磁盘读取图像并加载它 使用线程到raw队列。
  • 在另一个线程中,我读了raw队列,预处理并加载它 进入ready队列。
  • 在我的主线程中,我从ready队列中抽取了8批图像,并通过tensorflow训练运行它们。
  • 使用8个图像批次(每个~25MB的numpy矩阵),在任何给定时间,当前处理和两个队列之间至少应保持24 * 25MB的内存。但是,堆积仅显示90M的消费。

所以大堆未能看到至少我知道必须在任何特定时刻保存的600M内存。

因此,如果heapy看不到我所知道的内存,我不能相信它看到泄漏的位置。按照它正在泄漏的速度,它确实是一批图像造成的。

我在python中使用threading模块启动加载程序和预处理程序线程。我试过在线程代码和主代码中调用print h.heap(),所有结果都相同。

1 个答案:

答案 0 :(得分:1)

I ended up having an unbounded python Queue by accident. Simple fix. Weird that heapy didn't show memory that was allocated by the Queue. Well, memory_profiler did, and thus I tracked down the issue.

It sure would have been a beautiful thing if heapy had said, "hey, there's this Queue object using more memory than you were expecting."