如何测量 Linux 中应用程序或进程的内存使用情况?
摘自博客文章了解 Linux 上的内存使用情况, ps
不是用于此目的的准确工具。
Why ps
是错的”
取决于你如何看待它,ps
不报告进程的实际内存使用情况。它真正做的是显示每个进程将占用多少实际内存如果它是唯一正在运行的进程。当然,典型的 Linux 机器在任何给定时间都有几十个进程在运行,这意味着 VSZ 和 RSS 数量报告ps
几乎可以肯定wrong.
(Note: This question is covered here in great detail.)
With ps
或类似的工具,您只能获得该进程分配的内存页数量。这个数字是正确的,但是:
如果您确实想知道您的应用程序实际使用了多少内存,则需要在分析器中运行它。例如,Valgrind可以让您了解所使用的内存量,更重要的是,了解程序中可能存在的内存泄漏。 Valgrind 的堆分析器工具称为“massif”:
Massif 是一个堆分析器。它通过定期拍摄程序堆快照来执行详细的堆分析。它生成一个图表,显示随时间变化的堆使用情况,包括有关程序的哪些部分负责最多内存分配的信息。该图由文本或 HTML 文件补充,其中包含更多信息,用于确定最多内存分配的位置。 Massif 运行程序的速度比正常情况慢约 20 倍。
正如中所解释的Valgrind 文档,需要通过Valgrind运行程序:
valgrind --tool=massif <executable> <arguments>
Massif 写入内存使用快照转储(例如massif.out.12345
)。它们提供 (1) 内存使用情况的时间线,(2) 对于每个快照,记录程序内存的分配位置。用于分析这些文件的一个很棒的图形工具是地块可视化器。但我发现ms_print
,一个简单的基于文本的工具,随 Valgrind 一起提供,已经很有帮助了。
要查找内存泄漏,请使用(默认)memcheck
valgrind 的工具。
我自己没有尝试过的新工具是堆跟踪和gperftools 中的堆分析器.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)