当前位置: 首页 > 面试题库 >

如何衡量应用程序或进程的实际内存使用情况?

桑思远
2023-03-14
问题内容

您如何衡量Linux中应用程序或进程的内存使用情况?

从了解Linux上的内存使用的博客文章中可以看出,ps这不是用于此目的的准确工具。

为什么ps是“错”

根据您的看法,它ps不会报告进程的实际内存使用情况。它的真正作用是显示 如果 每个进程 是唯一运行的进程
每个进程将占用多少实际内存。当然,一台典型的Linux机器在任何给定时间都运行着几十个进程,这意味着报告的VSZ和RSS编号ps几乎肯定是
错误的


问题答案:

使用ps或类似的工具,您将只获得该进程分配的内存页数量。该数字是正确的,但是:

  • 不反映应用程序实际使用的内存量,仅反映为其保留的内存量

  • 如果页面被共享(例如由多个线程共享或通过使用动态链接的库)可能会产生误导

如果您确实想知道应用程序实际使用的内存量,则需要在分析器中运行它。例如,valgrind可以为您提供有关已用内存量的信息,更重要的是,您可以了解程序中可能的内存泄漏。valgrind的堆分析器工具称为“
massif”:

Massif是堆分析器。它通过对程序堆进行定期快照来执行详细的堆分析。它生成一个图表,显示随时间推移的堆使用情况,包括有关程序的哪些部分负责最多内存分配的信息。该图由文本或HTML文件补充,该文本或HTML文件包含更多信息,用于确定分配最大内存的位置。Massif运行的程序比正常运行慢约20倍。

如valgrind文档中所述,您需要通过valgrind运行程序:

valgrind --tool=massif <executable> <arguments>

Massif写入内存使用情况快照的转储(例如massif.out.12345)。这些提供了(1)内存使用的时间表,(2)每个快照,记录了程序存储器中的分配位置。massif-visualizer是分析这些文件的一种出色的图形工具。但是我发现ms_printvalgrind附带的一个简单的基于文本的工具已经很有帮助。

要查找内存泄漏,请使用memcheckvalgrind 的(默认)工具。



 类似资料:
  • 问题内容: 我有一台具有12G内存的服务器。top的片段如下所示: 该显示以下内容: 如果我理解正确,则系统只有362 MB的可用内存。我的问题是:如何找出哪个进程正在消耗大部分内存? 就像背景信息一样,系统正在运行。 问题答案: 首先,将这一口头禅重复一会儿:“未使用的内存就是浪费的内存”。Linux内核保持周围 巨大的 文件元数据并要求提供的文件量,直到一些看起来更重要的是推动了数据。这就是为

  • 问题内容: 如何以编程方式找到我的Android应用程序上使用的内存? 我希望有一种方法可以做到。另外,我也该如何获得手机的空闲内存? 问题答案: 请注意,现代操作系统(如Linux)上的内存使用是一个极其复杂且难以理解的领域。实际上,你正确解释任何数字的机会非常低。(几乎每当我与其他工程师一起查看内存使用量数字时,对于它们的实际含义总会进行长时间的讨论,这只会导致模糊的结论。) 注意:我们现在有

  • 问题内容: 我正在运行一个wordpress网站,每个PHP进程的使用空间约为200mb至250mb。使用16GB的ram,服务器只能处理大约70个进程。通过将虚拟内存增加到16GB,它可以处理140个。之后,负载不断增加。如果10分钟内有200个连接,则在3Ghz四核xeon处理器上服务器负载将达到20个! 我曾尝试停用所有插件,但这只会使每个进程的PHP内存使用量减少不到10%。suPHP告诉

  • 我有一个库伯内特斯豆荚 请求的1500Mb内存 我有2个容器在这个pod内运行,一个是实际应用程序(重型Java应用程序)和一个轻量级日志托运人。 pod始终报告内存使用量为1.9-2Gb。因此,部署是可伸缩的(设置了自动伸缩配置,如果内存消耗,可伸缩POD 黄线表示应用程序内存使用情况 然而,在更深入的调查中,我发现了这一点。 在应用程序容器内的ing上,我运行了命令,它报告了总共或大约16Gb

  • 我正在运行Apache Ignite应用程序。当我看到使用linux的内存使用时,我得到的使用内存为9.8GB。但是当我使用eclipse MAT进行堆转储时,它的大小只有大约1.8GB。为什么会这样?ignite中分配的默认堆内存为21 GB。我也没有做任何GC调优。

  • 如何配置我的应用程序引擎应用程序的内存(RAM)使用情况?我试图解决与超过实例内存限制相关的错误。我尝试过这些东西,到目前为止,它们不起作用或者不能提供我需要的东西。 Appstats。这不提供内存使用的详细信息 以上任何一点我都错了吗?在这个问题上,评分最高的答案(不是公认的答案)表示没有办法监控App Engine上的内存使用情况。那不可能是真的。可以吗? 编辑 我可以确认GAE mini p