Linux 进程分配的内存使用情况
Posted
技术标签:
【中文标题】Linux 进程分配的内存使用情况【英文标题】:Linux process allocated memory usage 【发布时间】:2016-03-15 15:48:13 【问题描述】:如何测量进程消耗的内存?进程退出非常快,因此像 top 这样的实用程序毫无用处。我尝试使用 valgrind 的 massif,但它只测量通过 malloc/new + 堆栈分配的内存,而不是静态变量。 --pages-as-heap 也无济于事,因为它也显示映射的内存。
【问题讨论】:
看这里unix.stackexchange.com/questions/21836/… 您没有阅读问题吗?我无法使用 ps,进程很快终止 嗨 Jani,我在下面的回答对你有用吗?我真的很想知道您是否需要更多帮助。 感谢您尝试帮助 Jacob,我实际上所做的是在 main() 末尾添加 system() 调用,该调用执行 ps 并将其导出到文件。 @JaniBaramidze 哈哈,我没有意识到你有你正在运行的程序的源代码。我以为你在做纯粹的黑盒分析。是的,system() 肯定能胜任 :) 【参考方案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 有一些你可以研究的内存跟踪选项。
【讨论】:
以上是关于Linux 进程分配的内存使用情况的主要内容,如果未能解决你的问题,请参考以下文章
Linux 内核 内存管理内存映射原理 ② ( 内存映射概念 | 文件映射 | 匿名映射 | 内存映射原理 | 分配虚拟内存页 | 产生缺页异常 | 分配物理内存页 | 共享内存 | 进程内存 )