【发布时间】: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