我想测量进程中每个线程的内存使用量。是否可以?我正在尝试找出哪些线程泄漏内存。
编辑1。用于泄漏过程的PMAP显示〜600分配[anon]
...
63b00000 772K rw--- [ anon ]
63bc1000 252K ----- [ anon ]
63c00000 772K rw--- [ anon ]
63cc1000 252K ----- [ anon ]
63d00000 772K rw--- [ anon ]
...
关于下一步该怎么做的建议?
编辑2。只有虚拟内存泄漏,例如物理内存使用稳定。
否这是不可能的,因为内存不是附加到线程的,而是将内存附加到该过程上。线程与内存的某些部分之间没有链接。
您似乎需要的是一个探测器,这将指向分配点。其中之一(在过去十年中不使用它)是理性净化。
您通常无法识别线程的内存使用情况,因为内存所有权可以在线程之间自由移动。内核映射表将向您显示整个过程的用法,即分配给所有线程的内存。
线程编程是 hard 。除非您确实需要在线程之间自由共享指针和内存(这是一种相当讨厌的代码气味,否则如果您将程序重新处理为通过IPC通信的一群过程,则可能会更容易调试,这也会迫使您考虑考虑哪个国家需要共享。作为奖励,如果泄漏过程被证明是一个相对短暂的过程,则记忆将返回到exit()
上的系统,而无需找到和修补泄漏。