我想跟踪各种程序在特定状态下触摸多less内存。 比如说我有一个graphics程序。 当它最小化时,可能会占用更less的内存,因为它不会重新绘制窗口,这需要读取图像和字体,并执行大量的库函数。 这些对象在内存中仍然可以访问,但实际上并没有被使用。
像top
这样的工具的使用是有限的,因为他们只是告诉有多less内存映射到一个程序的地址空间,多less是驻留在物理RAM中。 同样,泄漏检测器只会告诉何时内存不可访问,而不是如果它没有被使用。
有没有一种现有的工具可以跟踪积极使用/未使用的内存这种方式? 如果可能的话,我想跟踪使用不仅在堆上,而且在stored procedures/库代码的内存。
编辑:我想澄清:我想知道一个程序实际上读取,写入或执行一定的点后,即一旦它达到一定的状态很多的内存。 尽pipe地址空间中的页面数量和驻留页面的数量是重要的度量,但这并不是我正在寻找的。
我现在正在追求三种方法:
这可以从/ proc / pid / smaps中的数据导出。 这会为每个映射区域(包括堆栈,文本/数据和匿名映射区域)分配一个RSS值,以便您可以准确了解每个加载的对象以及堆栈和堆所驻留的内容。
一些可能有用的链接:
valgrind工具cachegrind在跟踪内存使用情况方面做得很好。
还有一些工具以图形方式显示cachegrind的输出。
编辑以响应更新的信息:
在valgrind出现之前,我使用了一个名为mpatrol的项目。
它使用mprotect()使页面成为只读并跟踪访问
页面。 它还允许指定何时开始和停止报告,
就像在第n个malloc之后,还有其他的规格。
它可能会做很多,或所有您正在寻找的功能。
一个警告,它比valgrind慢得多。