在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。如果系统需要,可以释放大部分缓存数据。