我正在使用系统监视器 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 很糟糕”:)