Linux:如何衡量进程内线程的内存使用情况?

时间:2012-11-08 14:45:55

标签: c++ c linux multithreading

我想测量进程中每个线程的内存使用情况。可能吗?我想弄清楚哪个线程泄漏内存。

编辑1。 泄漏过程的pmap显示了[anon]

的~600分配
...
63b00000    772K rw---    [ anon ]
63bc1000    252K -----    [ anon ]
63c00000    772K rw---    [ anon ]
63cc1000    252K -----    [ anon ]
63d00000    772K rw---    [ anon ]
...

关于下一步该做什么的建议?

编辑2。 只有虚拟内存泄漏,例如物理内存使用情况稳定。

2 个答案:

答案 0 :(得分:6)

不可能这不可能,因为内存没有附加到线程而是附加到进程。线程与内存的某些部分之间没有链接。

您似乎需要的是一个分析器,它将指向分配点。其中一个(过去十年没有使用它)是Rational Purify

答案 1 :(得分:2)

您通常无法识别线程的内存使用情况,因为内存所有权可以在线程之间自由移动。内核映射表将向您显示整个过程的用法,即为所有线程分配的内存。

线程编程是 hard 。除非你真的需要在线程之间自由地共享指针和内存 - 这是一个相当令人讨厌的代码味道 - 如果你将你的程序作为一组通过IPC进行通信的进程重新编程,它可能会更容易调试,这也会迫使你考虑哪个州需要分享。作为奖励,如果泄漏过程变得相对短暂,那么内存将在exit()上返回到系统,而无需定位和修补泄漏。