为什么我的服务器显示
total used free shared buffers cached
Mem: 12286456 11715372 571084 0 81912 6545228
-/+ buffers/cache: 5088232 7198224
Swap: 24571408 54528 24516880
我不知道如何计算 linux 中的内存。我认为它说使用 5088232 而 7198224 是免费的,这意味着它实际上消耗了 5GB 的 RAM?
值的含义
第一行的意思是:
total
:您的总(物理)RAM(不包括内核在启动时为自己永久保留的一小部分);这就是为什么它显示ca。11.7 GiB,而不是您可能拥有的 12 GiB。used
:操作系统正在使用的内存。free
: 内存未使用。shared
//buffers
:cached
这显示了用于特定目的的内存使用情况,这些值包含在 的值中used
。第二行给出调整后的第一行值。它给出了
used
减去总和buffers+cached
的原始值和free
加上总和的原始值buffers+cached
,因此它的标题。这些新值通常比第一行的值更有意义。最后一行 (
Swap:
) 提供有关交换空间使用情况的信息(即临时移动到磁盘的内存内容)。背景
要真正理解这些数字的含义,您需要了解一下 Linux 中的虚拟内存 (VM) 子系统的背景知识。只是一个简短的版本:Linux(像大多数现代操作系统一样)将始终尝试使用空闲 RAM 来缓存内容,因此
Mem: free
几乎总是非常低。因此显示了该行-/+ buffers/cache:
,因为它显示了忽略缓存时有多少内存可用;如果内存不足,缓存将自动释放,因此它们并不重要。如果行中的
free
值-/+ buffers/cache:
变低,Linux 系统的内存就会非常低。有关数字含义的更多详细信息,请参见问题:
procps 3.3.10 的变化
请注意,
free
procps 3.3.10(2014 年发布)中的输出已更改。报告的列现在是“total”、“used”、“free”、“shared”、“buff/cache”、“available”,并且一些值的含义发生了变化,主要是为了更好地说明 Linux 内核的平板缓存。有关动机,请参阅Debian 错误报告 #565518 ,以及从 14.04 到 16.04的输出变化是什么意思?
free
了解更多详细信息。当前接受的 2009 年答案已过时。确保您获得的信息是正确的并且与
free
(在 Debian 软件包procps
中分发或在您的分发中等效)的版本相匹配,这一点很重要。查看 和 的输出也很有帮助man free
,man 5 proc
其中包含有关在 Linux 上从中获取数据/proc/meminfo
的文件的信息。free
默认情况下,
free
的输出以千字节为单位(1 千字节 = 1024 字节),如您在手册页中所见。我更喜欢使用-h
显示后缀的参数,如下所示:第一行的
Mem
意思是:total
(Mem):总安装内存(即MemTotal
来自/proc/meminfo
),这是 RAM 中的所有内存used
(Mem):已用内存,等于total - free - buffers - cache
free
(Mem):未使用的内存(即MemFree
),这是 RAM 中所有未使用的内存(甚至缓存)shared
(Mem):这是主要用于tmpfs
(Shmem
)的内存量buff/cache
(Mem), 和 的buffers
总和cache
:buffers
:内核缓冲区使用的内存(Buffers
),这是内核可以利用的内存cache
:页面缓存和slabs(Cached
和SReclaimable
)使用的内存。页面缓存包含缓存到 RAM的文件系统中的文件内容,通常这是一个高数字是件好事。我认为“slabs”是一个类似的缓存功能。available
(Mem):这是估计有多少内存可用于启动新应用程序,无需交换。它包括该字段中计算的大部分内存cache
(因为可以删除页面缓存以启动新应用程序),但不计算交换(因为通常最好不要使用慢交换空间)。第二行是
Swap
. 这是我的解释:total
SwapTotal
(Swap):这是为交换 ( inproc/meminfo
)保留的磁盘空间总量。您可以通过检查这是否与swapon -s
.used
(Swap):当前正在使用的交换磁盘空间量。同样,您可以通过将其与swapon -s
free
(Swap):当前未使用的交换磁盘空间量 (SwapFree
in/proc/meminfo
)。它等于total (Swap) - used (Swap)
缓冲区/缓存行显示程序使用了多少内存(这些列中的第一列),并且可供程序使用(第二列)。这是一个相当深奥的数字,在实践中你不会真正关注它。