我正在运行张量流模型,在处理大图像的同时,在大约10分钟内耗尽了60G的RAM。
我运行Heapy尝试确定泄漏,但很多只显示内存使用量的90M并保持不变。
我注意到这篇文章:{{3}}
这表明问题可能出在内存碎片的python(这里是2.7)。但对于这种情况,这听起来并不合理。
raw
队列。 raw
队列,预处理并加载它
进入ready
队列。ready
队列中抽取了8批图像,并通过tensorflow训练运行它们。所以大堆未能看到至少我知道必须在任何特定时刻保存的600M内存。
因此,如果heapy看不到我所知道的内存,我不能相信它看到泄漏的位置。按照它正在泄漏的速度,它确实是一批图像造成的。
我在python中使用threading
模块启动加载程序和预处理程序线程。我试过在线程代码和主代码中调用print h.heap()
,所有结果都相同。
答案 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."