【问题标题】:Sum of RSS memory in ps less than memory actually used以 ps 为单位的 RSS 内存总和小于实际使用的内存
【发布时间】:2023-04-05 21:47:01
【问题描述】:

我们有两台机器具有相同的配置和用途(我们在其中有两台平衡的 Siebel 应用程序服务器)。

通常,我们在它们中使用非常相似的 RAM(大约 7 Gb)。 最近,我们只在其中一台机器上突然增加了 RAM,而现在那台机器的 RAM 利用率接近 14 Gb。

因此,对于非常相似的盒子,我们有一个使用 7Gb 的 RAM,而另一个使用 14Gb。

现在,使用 ps aux 命令来确定它正在使用所有这些额外内存的进程,我们看到两台机器的内存消耗非常相似。不知何故,我们没有看到任何进程正在使用这 7 Gb 的额外 RAM。

让我们看看: Machine 1: total used free shared buffers cached Mem: 15943 15739 204 0 221 1267 -/+ buffers/cache: 14249 1693 Swap: 8191 0 8191

所以,我们有 14249 Mb 的 RAM 使用量。

Machine 2: total used free shared buffers cached Mem: 15943 15636 306 0 962 6409 -/+ buffers/cache: 8264 7678 Swap: 8191 0 8191

所以,我们有 8264 Mb 的 RAM 使用量。

我猜,ps 的 Resident Set Size 内存的总和应该等于或大于这个值。根据this answer 是分配给进程的内存在RAM 中(包括来自共享库的内存)。我们在 SWAP 中没有任何内存。

但是:

机器 1:

ps aux | awk 'BEGIN {sum=0} {sum +=$6} END {print sum/1024}' 8357.08

8357.08 不行!

机器 2:

ps aux | awk 'BEGIN {sum=0} {sum +=$6} END {print sum/1024}' 8468.63

8468.63 > 8264 -> 好的

我做错了什么?我怎样才能找到这个“丢失”的内存在哪里?

提前谢谢你

【问题讨论】:

  • ps 数字不会考虑进程之间的共享内存,因此比较来自 ps 和 free 的汇总数据很困难。
  • 没错,拉曼,但是,作为结果,我希望 ps 输出比来自免费的输出更大,而不是相反。
  • Free 包括进程之间的共享内存,而 ps 不包括。因此,免费通常更大。
  • 感谢您的洞察拉曼,但我理解:“驻留集大小是进程当前分配和使用的物理内存量(没有换出页面)。它包括代码、数据和共享库(在使用它们的每个进程中都被计算在内)”。请参阅来自 Mikhail Krestjaninoff 的trustmeiamadeveloper.com/2016/03/18/where-is-my-memory-java
  • @user3779018 刚遇到同样的问题,请问有进展吗?

标签: linux memory memory-management redhat ps


【解决方案1】:

如果他们两个是虚拟机,可能“丢失”的内存被 Balloon 驱动程序占用,尤其是它们由 VMware ESXi 托管。

最近我遇到了类似的情况。所有进程的 RSS 总和为 14GB,命令free 显示已使用 26GB,因此缺少 12GB 内存。

在网上搜索后,我跟随this article并在我的VM上执行命令vmware-toolbox-cmd stat balloon,控制台显示12xxxMB(由气球使用),BINGO!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-03
    • 2021-06-22
    • 2014-02-14
    • 1970-01-01
    • 2012-02-07
    • 2011-10-03
    • 2022-08-03
    • 2021-11-18
    相关资源
    最近更新 更多