linux跟踪进程内存使用情况,在Linux程序中跟踪活动使用的内存

我想跟踪各种程序在特定状态下触摸的内存量.例如,假设我有一个图形程序.当它被最小化时,它可能会使用更少的内存,因为它不会重绘窗口,这需要读取图像和字体并执行大量的库函数.这些对象仍可在内存中访问,但实际上并未使用它们.

像top这样的工具用途有限,因为它们只是告诉我们将多少内存映射到程序的地址空间,以及它有多少内存驻留在物理RAM中.同样,泄漏检测器只会告诉内存何时无法访问,而不是仅仅是因为它没有被使用.

是否存在可以以这种方式跟踪活动使用/未使用的内存的现有工具?如果可能的话,我不仅要跟踪堆上的使用情况,还要跟踪存储程序/库代码的内存.

编辑:我想澄清一下:我想知道一个程序在某一点之后实际读取,写入或执行的内存,即一旦它达到某个状态.虽然地址空间中的页数和常驻页数是重要的测量值,但这不是我想要的.

我现在正在追求三种方法:

>我编写了一个库,清除了使用`mprotect`从/ proc / self / maps读取的所有内存区域(堆栈及其自己的代码除外)的保护位.它有一个segfault处理程序,可以恢复保护位并递增计数器.我用`LD_PRELOAD`加载它,并在收到信号时开始跟踪内存访问.这产生了一些看似虚假地址的真正故障(它们在故障时不存储在任何寄存器或附近的存储器中).

>我编写了一个`purge`程序,它使用`mmap`从内存中分配和读取,直到`mmap`返回错误.这有望强制执行目标进程中的所有页面,这些页面在`purge`运行时被暂停.然后,我使用`pidstat`计算目标进程恢复时页面入口的数量.这似乎有效,但它是一个非常生硬的工具.它没有提供有关触摸的页面的任何信息.

>我被告知valgrind允许您编写插件,导致某些操作在某些事件上执行,例如内存访问.到目前为止看起来很有希望

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值