c++ - Linux进程分配的内存使用情况

标签 c++ linux memory valgrind

如何测量进程消耗的内存?进程退出得非常快,所以像 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/

相关文章:

html - 使用 cURL 从自动下载页面下载文件

c - 为什么在任意内存位置设置值不起作用?

php - 在 PHP 中运行密集的批处理,并避免内存耗尽

c++ - 在 Visual Studio Code 中指定库路径?

c++ - 防止长时间运行平均溢出?

c - 任何想法如何将 udp ipv6 数据包发送到 cooja 模拟

linux - 如何直接从Linux hadoop edge节点自动复制文件到windows共享盘?

linux - Spreadsheet::WriteExcel set_optimization() 生成取消链接错误

c++ - 二叉树包含其他二叉树

c++ - 返回局部变量的地址与返回局部变量的指针