我有几个进程正在运行我写的管道连接的工具,我想用valgrind
来衡量他们收集的内存使用情况。到目前为止,我已经试过类似:使用valgrind跟踪管道命令的内存使用情况
$ valgrind tool=massif trace-children=yes --peak-inaccuracy=0.5 --pages-as-heap=yes --massif-out-file=myProcesses".%p" myProcesses.script
凡myProcesses.script
运行我的工具foo
相当于两次,例如:
foo | foo > /dev/null
Valgrind的似乎并没有捕捉到这个我所期望的方式收集到的内存使用情况。如果我使用top
来跟踪这个,我得到(出于参数的缘故)第一个foo
上10%的内存使用率,然后另一个10%在myProcesses.script
完成之前收集第二个foo
。这是我想衡量的事情:这两个过程的使用。 Valgrind的,而不是返回以下错误:
Massif: ms_main.c:1891 (ms_new_mem_brk): Assertion 'VG_IS_PAGE_ALIGNED(len)' failed.
有没有办法来收集我使用的管道方式的命令内存使用情况数据(使用valgrind
)?或者我可以使用一个类似的工具来准确自动执行这些测量?
top
在轮询时返回的数字对我来说似乎是手动的,我正在寻求准确和可重复的测量。如果您有替代工具的建议,我也欢迎这些。
编辑 - 固定错字valgrind
选项。
编辑2 - 出于某种原因,看起来选项--pages-as-heap
给我们带来了我们正在测试的二进制文件的麻烦。你的例子运行良好。每次我们输入非内联函数时都会创建一个新页面(堆栈溢出 - heh)。我们想要对这些数据进行计数,但它们在我们测试的内存使用规模上相对较小。 (也许ls
或less
中没有函数调用?)删除--pages-as-heap
有助于再次进行测试。感谢MrGomez的大力帮助。
至于你的页面对齐问题,这显然与在地块中设置新的内存断点时分页行为失败有关。我无法在我的结尾重现这个问题,但是我推测'--pages-as-heap = yes'在你的系统调用的上下文中对此负责。很显然,如果你想探究错误情况,看看为什么在调试器中碰到这种情况是最好的方法。 (请参阅下面的答案。) – MrGomez 2012-03-24 23:03:28