Linux "free -m":总内存值、已用内存值和可用内存值不相加



在linux系统上,当使用"free"时,值如下:

         total      used      free    shared  buff/cache   available
Mem:  26755612    873224    389320    286944    25493068    25311948
Swap:        0         0         0

总数、已使用值和空闲值不加起来。我希望total = used + free

问题:我遗漏了什么?

对于主存,由于 buffers/cache = buffer+cache ,实际内存大小可以计算为 used+free+buffers+cache used+free+buffers/cache

free的手册页突出显示 used Used memory (calculated as total - free - buffers - cache)

free的手册页说:-

total 已安装内存总数(/proc/meminfo中的MemTotal和SwapTotal)

已用内存 已用内存(以total - free - buffers - cache计算)

free 未使用内存(MemFree and SwapFree in/proc/meminfo)

shared tmpfs (Shmem in/proc/meminfo)使用的内存(大部分)在内核2.6.32上,如果不可用则显示为零)

buffers 内核缓冲区使用的内存(/proc/meminfo中的缓冲区)

cache 页面缓存和Slab (Cached和Slab in)使用的内存/proc/meminfo)

buff/cache buffer and cache的总和

available 估计启动新应用程序时可用的内存数量,不需要交换。与cache或free字段提供的数据不同,该字段考虑了页面缓存,并且由于项目正在使用,并非所有可回收内存板都将被回收(MemAvailable在/proc/meminfo中,在内核3.14中可用,在内核2.6.27+中模拟,否则与free相同)

对你来说,


873224(used) + 389320(free) + 25493068(buff/cache) = 26755612(total)


Linux喜欢缓存它打开的每个文件。每次打开文件进行读取时,Linux都会缓存该文件,但如果需要将内存用于更重要的事情,例如当系统上的某个进程想要分配更多内存时,Linux会丢弃这些缓存。当重复使用相同的文件时,这些内存中的缓存只是使Linux更快。每次它想要读取文件的时候,它都不是去磁盘,而是从内存中读取,内存比磁盘快得多。这就是为什么您的系统显示buff/缓存中使用的25493068,但也显示可用的25311948。如果系统需要,可以释放大部分缓存数据。

最新更新