2016-03-15 58 views
0

如何测量进程使用的内存?进程很快就会退出,所以顶级公用程序无用。我尝试使用valgrind的地块,但它只测量通过malloc/new + stack分配的内存,而不是例如静态变量。 - 页面作为堆并没有帮助,因为它也显示映射的内存。Linux进程分配的内存使用情况

+0

看这里http://unix.stackexchange.com/questions/21836/how-to-find-out-total-memory-resource-usage-with-ps – LibertyPaul

+0

你没看过这个问题吗?我不能使用ps,进程快速终止 –

+0

嗨Jani,我的答案是否在为你工作?我真的很想知道你是否需要更多的帮助。 –

回答

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 2 && netstat。这将等待2秒钟,然后运行netstat。

如果这听起来不错,也许尝试在调试器中运行您的程序。我相信gdb有一些内存跟踪选项,你可以看看。