Linux:如何测量进程中线程的内存使用率

Linux: How to measure memory usage for a thread within process?

本文关键字:进程 线程 使用率 内存 测量 何测量 Linux      更新时间:2023-10-16

我想测量进程中每个线程的内存使用量。是否可以?我正在尝试找出哪些线程泄漏内存。

编辑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()上的系统,而无需找到和修补泄漏。