如何衡量Linux中应用程序或进程的内存使用情况
从了解Linux上的内存使用情况的博客文章中可以看出,ps并不是用于此目的的准确工具
为什么
psis";“错误”根据您的看法,
ps不会报告进程的实际内存使用情况。它真正做的是显示如果它是唯一运行的进程,每个进程将占用多少实际内存。当然,一台典型的Linux机器在任何给定时间都有几十个进程在运行,这意味着ps报告的VSZ和RSS编号几乎肯定是错误的
(注意:这个问题在这里有非常详细的介绍。)
使用ps或类似工具,您只能获得该进程分配的内存页数量。这个数字是正确的,但是:
-
不反映应用程序使用的实际内存量,仅反映为其保留的内存量
-
如果页面共享,例如由多个线程或使用动态链接库共享,则可能会产生误导
如果您确实想知道应用程序实际使用了多少内存,则需要在探查器中运行它。例如,Valgrind可以让您了解所使用的内存量,更重要的是,了解程序中可能存在的内存泄漏。Valgrind的堆探查器工具称为“massif”:
Massif是一个堆分析器。它通过获取程序堆的常规快照来执行详细的堆分析。它生成一个图表,显示一段时间内堆的使用情况,包括程序中负责内存分配最多的部分的信息。图形由文本或HTML文件补充,该文件包含更多信息,用于确定分配的内存最多的位置。Massif运行程序的速度比正常速度慢20倍左右
如Valgrind文档中所述,您需要通过Valgrind运行程序:
valgrind--tool=massif<;可执行文件>&书信电报;争论>;
Massif写入内存使用快照转储(例如,Massif.out.12345)。它们提供,(1)内存使用时间线,(2)对于每个快照,程序内存分配位置的记录。分析这些文件的一个很好的图形工具是massif visualizer。但是我发现Valgrind附带的一个简单的基于文本的工具<;code>ms_print,已经非常有用了
要查找内存泄漏,请使用valgrind的(默认)memcheck工具