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

Mic*_*sey 14 linux memory free-command

在linux系统上,使用"free"时,以下是值:

         total      used      free    shared  buff/cache   available
Mem:  26755612    873224    389320    286944    25493068    25311948
Swap:        0         0         0
Run Code Online (Sandbox Code Playgroud)

总计,使用和免费值不相加.我期待总数=使用+免费.

问题: 我在这里错过了什么?

Am_*_*ful 13

对于主存储器,实际的存储器大小可以计算为used+free+buffers+cacheOR,used+free+buffers/cache因为buffers/cache = buffer+cache.

free高亮的手册页usedUsed memory (calculated as total - free - buffers - cache)

正如免费手册所说: -

安装内存总量(/ proc/meminfo中的MemTotal和SwapTotal)

used used memory(计算为total - free - buffers - cache)

免费 未使用的内存(/ proc/meminfo中的MemFree和SwapFree)

共享内存(主要)由tmpfs使用(Shmem在/ proc/meminfo中,在内核2.6.32上,如果不可用则显示为零)

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

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

buff/cache 缓冲区和缓存的总和

可用于 估计可用于启动新应用程序的内存量,无需交换.与缓存或空闲字段提供的数据不同,此字段考虑了页面缓存,并且由于正在使用的项目,并非所有可回收的内存块都将被回收(MemAvailable在/ proc/meminfo中,在内核3.14上可用,模拟在内核2.6.27+,否则与免费相同)

在你的情况下,


873224(已使用)+ 389320(免费)+ 25493068(buff/cache)= 26755612(总计)



小智 8

Linux喜欢缓存它打开的每个文件.每次打开一个文件进行读取时,Linux都会对它进行缓存,但是如果它需要内存以获得更重要的内容,它将丢弃这些缓存 - 比如当系统上的进程想要分配更多内存时.内存中的这些缓存只是在一遍又一遍地使用相同文件时使Linux更快.它不是每次想要读取文件时实际进入磁盘,而是从内存中获取内存,并且内存比磁盘快得多.这就是为什么你的系统显示25493068用于buff /缓存但也显示25311948可用.如果系统需要,可以释放大部分缓存数据.