如何在 Linux 中获取基于每个线程的进程的内存消耗?我知道我们可以使用 /proc/pid/task/tid/statm,但这对我的情况没有帮助。所有线程都显示相同的值,并且与 PID 的 statm 相同。
我们可以做 valgrind,但我不是在寻找任何无效的读/写或泄漏。Valgrind 不会告诉我任何线程级别的信息。
还有其他建议吗?
编辑:我如何分析我的代码?在哪个函数/行号等中分配了多少内存?
如何在 Linux 中获取基于每个线程的进程的内存消耗?我知道我们可以使用 /proc/pid/task/tid/statm,但这对我的情况没有帮助。所有线程都显示相同的值,并且与 PID 的 statm 相同。
我们可以做 valgrind,但我不是在寻找任何无效的读/写或泄漏。Valgrind 不会告诉我任何线程级别的信息。
还有其他建议吗?
编辑:我如何分析我的代码?在哪个函数/行号等中分配了多少内存?
所有线程共享相同的地址空间并使用相同的堆,因此除了它们的堆栈之外,它们都应该显示相同的内存使用情况。
Linux中有一个选项可以查看cpu和内存的线程级使用情况
您可以使用top
带有选项的命令-H
和-p
top -H -p<PID>
命令将列出带有以下标题的结果,PID
在这种情况下您应该读为 TID(Thread id)。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND`
在 java 进程的情况下,如下所示非常明显。如果您创建进程的线程转储并将线程 id 转换为十进制,则可以与输出中列出的 TID 匹配top -H -p <PID>
为了