如何在Linux中获得每个线程的进程内存消耗?我知道我们可以使用/ proc/pid/task/tid/statm,但那不能帮助我的情况。 所有线程都显示相同的值并且与PID的统计量相同。进程的线程级内存消耗
我们可以做valgrind,但我不寻找任何无效的读/写或泄漏。 Valgrind不会告诉我任何线程级别的信息。
其他建议?
编辑: 如何分析我的代码?多少内存分配在哪个函数/行号等?
如何在Linux中获得每个线程的进程内存消耗?我知道我们可以使用/ proc/pid/task/tid/statm,但那不能帮助我的情况。 所有线程都显示相同的值并且与PID的统计量相同。进程的线程级内存消耗
我们可以做valgrind,但我不寻找任何无效的读/写或泄漏。 Valgrind不会告诉我任何线程级别的信息。
其他建议?
编辑: 如何分析我的代码?多少内存分配在哪个函数/行号等?
Linux中有一个选项可以查看CPU和内存的线程级使用
可以使用命令top
与选项-H
和-p
top -H -p<PID>
命令将列出结果与下面的头和在这种情况下,您应该读取PID
作为TID(线程ID)。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND`
在java进程的情况下,它是非常明显的如下。如果你创建一个进程的线程转储和转换线程ID为十进制你可以在top -H -p <PID>
输出上市对于
嘛TID匹配,概念,所有的线程可以访问相同的内存池,所以他们都使用相同的金额。你想跟踪的是每个线程的分配数量 - 我不认为glibc或内核会这样做。并考虑:你如何计算在一个线程中分配的内存块,并在另一个线程中释放? – 2009-10-14 17:03:06
我可以在malloc上面编写包装器,它可以收集统计信息,但如果我用大量的malloc分析庞大的代码,它会很困难。 – Jack 2009-10-14 17:12:02
如何使用调用'gettid(2)'的malloc的包装?这样,您可以保持调用代码相同,同时跟踪哪个线程正在调用封装。 – 2009-10-14 17:39:24