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

时间:2015-06-11 05:33:32

标签: linux memory free-command

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

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

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

问题: 我在这里缺少什么?

2 个答案:

答案 0 :(得分:13)

对于主内存,实际内存大小可以计算为 clang -x c++ one.cc -o one.cc.o clang a.o b.o c.o one.cc.o used+free+buffers+cache ,因为 {{1} }

used+free+buffers/cache的手册页将 buffers/cache = buffer+cache 突出显示为free

正如免费的手册页所说: -

  

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

     

使用 已用内存(按总计 - 免费 - 缓冲区 - 缓存计算)

     

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

     

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

     

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

     

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

     

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

     

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

在你的情况下,

  

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

答案 1 :(得分:8)

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