0

我一直在寻找一种方法来测量 Linux 上的内存使用情况。我发现了三种主要的方法,我不确定我应该使用什么,因此我在这里征求意见。

  1. 监视内存的最普遍且可能更简单的方法似乎是读取 /proc/pid/status 并读取适当的字段VmSizeVmData或其他任何内容。这就是程序 ps、to、vmstat 设法收集这些信息的方式(我的意思是,监控 /proc/pid/...)。该信息将提供即时信息。

  2. 我可以调用一个 fork,然后调用一个 exec 来运行我想要监控的程序,然后 wait4 来填充一个 rusage 结构。从那里我可以读取所需的字段。似乎在 Linux 中,wait4 不填充 rsusage 结构中的内存字段,而只填充与 cpu 使用相关的字段。这是 time 命令获取其信息的方式。

  3. 我可以更改 strace 代码,以跟踪所有后续的 brk、mmap、munmap 系统调用,并汇总以获得堆大小。这里的困难是解码所有可能的只读、读|写、执行等的 mmap 参数,并测试返回值以了解系统是否成功。

对于 3),您认为我可以通过这种方式测量内存使用情况吗?会不会太难了?我对 strace 代码有很好的理解,但我从记忆中理解得不够,不知道这是否可能。

4

2 回答 2

0

如果你的程序只对使用 malloc() 完成的内存分配感兴趣,你可以看看 mallinfo()。

于 2011-12-02T17:37:19.473 回答
0

在 Linux 上,有关内存映射的更精确信息可通过pmapor/proc/self/maps文件获得/proc/1234/maps(其中 1234 是进程 ID)。尝试cat /proc/self/maps了解更多。

于 2011-12-02T18:28:08.160 回答