如何衡量流程消耗的内存?流程很快就会退出,所以像top这样的公用事业是没用的。我尝试使用valgrind的massif,但它只测量通过malloc / new + stack分配的内存,而不测量静态变量。 --pages-as-heap也没有帮助,因为它也显示了映射内存。
答案 0 :(得分:1)
可能对你有用的东西是使用一个脚本,它会在程序启动后立即重复运行'ps'。我已经编写了以下脚本,该脚本应该可以用于您的目的,只需将顶部的变量替换为您的具体细节。它当前在后台运行'netstat'(注意&符号)并在样本之间以0.1秒的间隔对内存进行10次采样,将内存检查的结果写入文件。我在cygwin上运行它并且它工作(减去-o rss,vsz参数),我目前无法访问linux机器但是如果由于某种原因它不能立即适应它应该很容易工作
#! /bin/bash
saveFileName=saveFile.txt
userName=jacob
programName=netstat
numberOfSamples="10"
delayBetweenSamples="0.1"
saveFileName=saveFile
i="0"
$programName &
while [ $i -lt $numberOfSamples ]
do
ps -u $userName -o rss,vsz | grep $programName >> $saveFileName
i=$[$i+1]
sleep $delayBetweenSamples
done
如果你的程序运行速度太快,以至于在执行它和在脚本中运行ps之间的延迟太长,你可能会考虑延迟运行程序并使用非常高的采样频率来尝试捕获它。你可以使用'sleep'和两个&符号来表达sleep 2 && netstat
。那将等待2秒然后运行netstat。
如果这对您来说都不好,也许可以尝试在调试器中运行您的程序。我相信 gdb 有一些你可以查看的内存跟踪选项。