我想测量进程中每个线程的内存使用情况。可能吗?我想弄清楚哪个线程泄漏内存。
编辑1。 泄漏过程的pmap显示了[anon]
的~600分配...
63b00000 772K rw--- [ anon ]
63bc1000 252K ----- [ anon ]
63c00000 772K rw--- [ anon ]
63cc1000 252K ----- [ anon ]
63d00000 772K rw--- [ anon ]
...
关于下一步该做什么的建议?
编辑2。 只有虚拟内存泄漏,例如物理内存使用情况稳定。
答案 0 :(得分:6)
不可能这不可能,因为内存没有附加到线程而是附加到进程。线程与内存的某些部分之间没有链接。
您似乎需要的是一个分析器,它将指向分配点。其中一个(过去十年没有使用它)是Rational Purify。
答案 1 :(得分:2)
您通常无法识别线程的内存使用情况,因为内存所有权可以在线程之间自由移动。内核映射表将向您显示整个过程的用法,即为所有线程分配的内存。
线程编程是 hard 。除非你真的需要在线程之间自由地共享指针和内存 - 这是一个相当令人讨厌的代码味道 - 如果你将你的程序作为一组通过IPC进行通信的进程重新编程,它可能会更容易调试,这也会迫使你考虑哪个州需要分享。作为奖励,如果泄漏过程变得相对短暂,那么内存将在exit()
上返回到系统,而无需定位和修补泄漏。