如何测量进程消耗的内存?进程退出得非常快,所以像 top 这样的实用程序是无用的。我尝试通过 valgrind 使用 massif,但它仅测量通过 malloc/new + 堆栈分配的内存,而不是静态变量。 --pages-as-heap 也没有帮助,因为它也显示了映射内存。
最佳答案
可能对您有用的方法是使用一个脚本,该脚本将在您的程序启动后立即重复运行“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 之间的延迟太长,您可以考虑延迟运行您的程序并使用非常高的采样频率来 try catch 它。您可以通过使用“ sleep ”和两个符号(例如 sleep 2 && netstat
)来做到这一点。这将等待 2 秒,然后运行 netstat。
如果您觉得这些都不好,也许可以尝试在调试器中运行您的程序。我相信 gdb 有一些您可以查看的内存跟踪选项。
关于c++ - Linux进程分配的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36016030/