您如何衡量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_print
valgrind附带的一个简单的基于文本的工具已经很有帮助。
要查找内存泄漏,请使用memcheck
valgrind 的(默认)工具。
问题内容: 我有一台具有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