4

我想测量进程中每个线程的内存使用情况。是否可以?我试图找出哪个线程泄漏内存。

编辑 1. 泄漏过程的 pmap 显示 [ anon ] 分配了 ~600

...
63b00000    772K rw---    [ anon ]
63bc1000    252K -----    [ anon ]
63c00000    772K rw---    [ anon ]
63cc1000    252K -----    [ anon ]
63d00000    772K rw---    [ anon ]
...

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

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

4

2 回答 2

6

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

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

于 2012-11-08T14:48:01.170 回答
2

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

线程编程很难。除非你真的需要在线程之间自由共享指针和内存——这是一种相当讨厌的代码味道——如果你将程序重新设计为通过 IPC 通信的一群进程,那么调试可能会更容易,这也将迫使你考虑需要共享哪个状态。作为奖励,如果泄漏进程被证明是一个相对短暂的进程,则内存将返回到系统中,exit()而无需定位和修补泄漏。

于 2012-11-09T11:09:09.930 回答