我最近一直在做一些挖掘工作,我试图看看最好的方法是跟踪在Linux上运行的实时软件中的内存使用情况(在这种情况下,在一堆节点上,使用MPI)。由于代码没有最终条件,我希望能够实时跟踪内存使用情况,查看哪个MPI图像使用最多,哪些函数使用最多,每个节点使用了多少,以及整个系统在整个系统中使用了多少整个可执行文件。
那里有工具吗?似乎我发现的大多数事情都是在事后得出结果的剖析器。希望答案能够跟踪我的软件和我的软件正在使用的第三方库的内存使用情况,我无法访问源代码。
答案 0 :(得分:0)
操作系统通常可以在每个可执行文件/线程的运行时间内动态提供数据(例如,参见linux ps
命令)。
如果要跟踪调用者,则可以覆盖new
和delete
运算符以收集运行时分配/释放数据并跟踪调用它的函数并将其记录到某处。
答案 1 :(得分:0)
正如littleadv所提议的:我会覆盖new / delete(可能是malloc / free)并跟踪它们的分配和大小。跟踪此类分配的一种好方法是将它们推送到文件或通过网络流,以允许其他程序分析日志。编写一个python / lua脚本来解析日志(如果你很好地格式化)可以很好地向你呈现信息。
根据您的链接方式,覆盖第三方软件内存分配可能很粗糙。通过DLL的内存覆盖通常是一个粗暴的痛苦,所以看看你是否可以静态链接它们以强制它们使用你的分配。
答案 2 :(得分:0)
查看vstat
。 (man pages for vstat)