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

标签 linux memory monitor mmap strace

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

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

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

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

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

最佳答案

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

关于linux - 通过系统调用监控Linux上的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8360047/

相关文章:

Java:从目录中获取新文件列表

cocoa - 在 Cocoa 中进行全局事件监控是否需要用户界面?

javascript - 是否可以在浏览器中监控CPU/GPU?

linux - 内核是一个进程吗?

php - 从php5.5.9升级到php5.6后,php5enmod相当于什么?

android - 自定义字体的有效方法

iphone - CALayer 崩溃、内存问题

c - 声明大数组时出现堆栈溢出异常

javascript - Node js azure SDK getBlobToStream 使用大量内存

linux - 如何在 Curl 字符串中使用公历时间戳