系统监视器中的内存使用情况报告和 free 的内存使用情况报告有何区别?

系统监视器中的内存使用情况报告和 free 的内存使用情况报告有何区别?

我正在使用系统监视器 2.28.0。当我查看“资源”选项卡时,我看到一个漂亮的内存和交换图表。内存约为 3.8 的 60% 2.3 GiB。当我输入命令 free 时,我得到了:

             total       used       free     shared    buffers     cached
Mem:       3994908    3962396      32512          0     100852    1477032
-/+ buffers/cache:    2384512    1610396
Swap:      8000328      28468    7971860

cat /proc/meminfo | grep MemFree 给予

MemFree:           34536 kB

这种情况持续了几分钟。我用脚本启动了很多进程,脚本正在等待可用内存变低。根据我在“进程”选项卡(或使用 top)中看到的内容,系统监视器中的数字似乎非常接近 free 报告的进程内存总量。

谢谢

答案1

区别在于“缓冲区”和“缓存”内存是否包含在“已用”计数中。

通常,Linux 系统内存被内核用于两个目的:进程和文件/网络缓存/缓冲区。如果你仔细查看 的输出free,就会发现:


             total       used       free     shared    buffers     cached
Mem:       3994908    3962396      32512          0     100852    1477032
-/+ buffers/cache:    2384512    1610396
Swap:      8000328      28468    7971860

如果您添加“缓冲区”和“缓存”,然后从“已使用”列中减去它们,您将获得“已使用”下的第二行(以 开头的行-/+ buffers/cache),其中显示正在使用的内存约为 2.3G(2384512),这与系统监视器报告的正在使用的内存相匹配(它忽略了缓冲区/缓存,因为它们将消失以便为更多进程腾出空间)。

您的 grep/proc/meminfo实际上与第一行的“空闲”列匹配(32512 足够接近 34536——它可能在两个命令输出之间发生了变化)。

答案2

当我拿到系统监视器时,“资源”选项卡中报告的内存使用情况与free中的列相同/usr/bin/free

问题是,空闲的物理内存迟早会接近 0:Linux 会积极缓存,以便高效利用您购买 RAM 的钱。这意味着图表将不断显示 >98% 的内存使用率,这是没有意义的。

所以我/我们决定像 那样做-/+ buffers/cache:/usr/bin/free这样,图表就有意义了,让用户可以看到应用程序/用户空间的内存使用情况,而不是内存的物理状态。

我知道,这有点误导,因为大多数(l)用户不明白空闲物理内存是浪费金钱和性能。我在工作中也遇到过同样的问题:每个星期一,服务器都会重新启动,在接下来的 24 小时内,每台服务器都会触发“内存已满”警报。所以我在监控软件中修复了空闲内存计算,就像在系统监视器中一样。

当前的 Solaris 有同样的问题:ZFS 缓存(ARC)没有包含在类似工具报告的可用内存中,vmstat这使得愚蠢的数据库管理员抱怨“ZFS 很糟糕”:)

相关内容