通过系统调用监控linux上的内存

时间:2011-12-02 17:14:23

标签: linux memory monitor mmap strace

我一直在寻找一种衡量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参数 只有,读,写,执行等,并测试返回值,以了解是否 系统成功。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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