我正在使用系统监视器 2.28.0。当我查看“资源”选项卡时,我看到了一个包含内存和交换的漂亮图表。内存约为 3.8 的 2.3 GiB 的 60%。当我免费输入命令时,我得到:
total used free shared buffers cached
Mem: 3994908 3962396 32512 0 100852 1477032
-/+ buffers/cache: 2384512 1610396
Swap: 8000328 28468 7971860
猫 /proc/meminfo | grep Mem 免费赠送
MemFree: 34536 kB
这种情况已经维持了几分钟。我用脚本启动了很多进程,脚本正在等待可用内存变低。根据我在“进程”选项卡(或顶部)中看到的内容,系统监视器中的数字似乎与 free 报告的进程的内存总量非常接近。
谢谢
区别在于“缓冲区”和“缓存”内存是否包含在“已使用”计数中。
通常,内核使用 Linux 系统内存有两个目的:进程和文件/网络缓存/缓冲区。如果您仔细查看 的输出
free
,它已经显示:如果添加“buffers”和“cache”,然后从“used”列中减去,您将得到“used”下的第二行(以 开头的行
-/+ buffers/cache
),其中显示大约 2.3G(2384512)使用,它与系统监视器报告的正在使用的报告内存匹配(它忽略缓冲区/缓存,因为这些将消失以为更多进程腾出空间)。您的 grep against
/proc/meminfo
实际上与第一行的“免费”列匹配(32512 与 34536 足够接近——它可能在两个命令输出之间发生了变化)。当我使用系统监视器时,“资源”选项卡中报告的内存使用情况
free
与/usr/bin/free
.问题是空闲物理内存迟早会接近 0:Linux 会积极缓存,因此您花在购买 RAM 上的钱得到了有效利用。这意味着图表将不断显示 >98% 的内存使用情况,这是无用的。
所以我/我们决定像
-/+ buffers/cache:
./usr/bin/free
这样,图表是有意义的,让用户观察〜应用程序/用户空间的内存使用情况,而不是内存的物理状态。我知道,这有点误导,因为大多数(l)用户不明白空闲物理内存是浪费金钱和性能。我在工作中遇到了同样的问题:每个星期一,服务器都会重新启动,在接下来的 24 小时内,每台服务器都会触发“内存已满”警报。所以我在监督软件中修复了空闲内存计算,就像在系统监视器中一样。
当前的 Solaris 也有同样的问题:ZFS 缓存(ARC)不包括在工具报告的可用内存中,
vmstat
这使得愚蠢的数据库管理员抱怨“ZFS 很糟糕”:)