Free - QLGQ/learning-python GitHub Wiki

free

Linux下在终端环境下可以使用free命令看到系统实际使用内存的情况,一般用free -m方式查看内存占用情况(兆为单位)。系统实际内存占用以及可用内存有如下几个加减法:

  • used = total - free 即 total = used + free
  • 实际内存占用: used - buffers - cached 即 total - free -buffers - cached
  • 实际可用内存: free + buffers + cached 即 total - used + buffers + cached
[root@db2 pgdata]# free -m
             total       used       free     shared    buffers     cached
Mem:        516913     410968     105944          0        238     390001
-/+ buffers/cache:      20727     496185
Swap:        35895       2417      33478

可见:-buffers/cache反映的是被程序实实在在使用的内存,而+buffers/cache反映的是可以挪用的内存总数。
交换分区Swap,也就是我们通常所说的虚拟内存。

Buffers和Cached的区别

A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later useA buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later use.
对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。

  • buffers:指用来给块设备做的缓冲大小,它只记录文件系统的metadata以及tracking in-flight pages。(写缓存,在写入磁盘之前,先把数据缓存一段时间,可以释放。)
  • cached:用来给文件做缓冲。(读缓存,读取过的文件,会缓存一段时间,可以释放。)

那就是说:buffers是用来存储,目录里面有什么内容、权限等等;而cached直接用来记忆我们打开的文件。

  • 当你看见 buffer/cache 的空闲空间低或者 swap 的空闲空间低,说明内存需要升级了。这意味这内存利用率很高。请注意 shared(共享)内存列应该被忽略 ,因为它已经被废弃了。
  • 所以我们看linux,只要不用swap的交换 空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看 内存是否够用的标准哦。

那明明已经开始使用 swap了,怎么能说内存还充足呢?照我的理解是,系统在分配内存的时候,如果发现内存不足,会释放一批旧的cache,把空间腾出来给新申请的进程用, 有时候释放不充分或者不及时,于是开始使用到swap了!

References

linux free 解读 Linux使用free命令查看实际内存占用