我在 linux (ubuntu20) 上运行 tensorflow。 TF 执行我的 c++ 函数以进行图形编译/销毁。
进程虚拟内存的消耗增长,直到内存不足(>40GB),进程被杀死。
我使用
malloc
钩子跟踪 free
/mmap
和 munmap
/LD_PRELOAD
,并与 /proc/self/status (VmSize) 中的进程虚拟内存消耗进行比较。
每个图形编译都会增加几乎相同大小的 malloc 分配内存和进程虚拟内存。
图破坏减少了 malloc 分配的大小,但不会减少进程虚拟内存。
所以尽管 malloc 分配的内存保持整体稳定,进程虚拟内存增长很快。
例如:
before compile: 41MB[mmap]/3320MB[malloc]/12428MB[process]
after compile: 46MB[mmap]/7434MB[malloc]/16529MB[process]
before destroy: 46MB[mmap]/7436MB[malloc]/16593MB[process]
after destroy: 46MB[mmap]/3250MB[malloc]/16593MB[process]
graphDestroy
不会破坏所有设计,因此预计会有少量剩余物。
我试着玩
mallopt(M_MMAP_THRESHOLD)
没有结果。
为了找到泄漏点,还可以做什么?