Linux free命令 ------笔记

  • 参数用法说明

man free 可以得到详细的信息,这里贴个中文的,读起来快。

 

语  法:  free [-bkmotV][-s < 间隔秒数 >]

补充说明: free 指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。

参  数:

  -b   以 Byte 为单位显示内存使用情况。

  -k   以 KB 为单位显示内存使用情况。  

  -m   以 MB 为单位显示内存使用情况。  

  -o   不显示缓冲区调节列。  

  -s< 间隔秒数  持续观察内存使用状况。  

  -t   显示内存总和列。  

  -V   显示版本信息。

  • free输出内容解析

             total       used       free     shared    buffers     cached
Mem:       1022420     665104     357316          0     107012     278204
-/+ buffers/cache:     279888     742532
Swap:      1045500     223188     822312

  • Mem这一行 :

      total 物理内存总数 : 1022420

      used 已经使用的内存数 : 665104

      free 空闲的内存数 : 357316

      shared 当前已经废弃不用,总是 0

      buffers Buffer Cache 内存数 : 107012

      cached Page Cache 内存数 : 278204

      关系: total = used + free

 

  • -/+ buffers/cache这一 :

      -buffers/cache 的内存数: 279888 ( 等于第 1 行的 used - buffers - cached), 实际上是应用程序所使用的内存。
       +buffers/cache
的内存数 : 742532 ( 等于第 1 行的 free + buffers + cached), 是对应用程序来说还剩余的内存。

 

      可见 -buffers/cache 反映的是被程序实实在在吃掉的内存,而 +buffers/cache 反映的是可以挪用的内存总数。

对操作系统来讲 buffers/cached 都是属于被使用 , 所以它认为 free 只有 357316.

      对应用程序来讲是 (-/+ buffers/cach).buffers/cached 是等同可用的,因为 buffer/cached 是为了提高程序执行的性能,当程序使用内存时, buffer/cached 会很快地被使用。

 

  • 第三行是交换分区 swap, 列出已使用、空闲的 swap.

      SWAP 就是 LINUX 下的虚拟内存分区 , 它的作用是在物理内存使用完之后 , 将磁盘空间 ( 也就是 SWAP 分区 ) 虚拟成内存来使用。 Swap 空间的作用可简单描述为:当系统的 物理内存 够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的 空间被临时保存到 Swap 空间中,等到那些程序要运行时,再从 Swap 中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行 Swap 交换

 

  • buffers cached 都是缓存,两者有什么区别呢?

 

      为了提高磁盘存取效率 , Linux 做了一些精心的设计 , 除了对 dentry 进行缓存 ( 用于 VFS, 加速文件路径名到 inode 的转换 ), 还采取了两种主要 Cache 方式: Buffer Cache Page Cache 。前者针对磁盘块的读写,后者针对文件 inode 的读写。这些 Cache 有效缩短了 I/O 系统调用 ( 比如 read,write,getdents) 的时间。

      磁盘的操作有逻辑级(文件系统)和物理级(磁盘块),这两种 Cache 就是分别缓存逻辑和物理级数据的。

      Page cache 实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到 page cache 。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当 page cache 的数据需要刷新时, page cache 中的数据交给 buffer cache ,因为 Buffer Cache 就是缓存磁盘块的。但是这种处理在 2.6 版本的内核之后就变的很简单了,没有真正意义上的 cache 操作。

      Buffer cache 是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到 buffer cache 中,例如,文件系统的元数据都会缓存到 buffer cache 中。
       简单说来, page cache 用来缓存文件数据, buffer cache 用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到 page cache ,如果直接采用 dd 等工具对磁盘进行读写,那么数据会缓存到 buffer cache

      所以我们看 linux, 只要不用 swap 的交换空间 , 就不用担心自己的内存太少 . 如果常常 swap 用很多 , 可能你就要考虑加物理内存了 . 这也是 linux 看内存是否够用的标准 .

      如果是应用服务器的话,一般只看第二行, +buffers/cache, 即对应用程序来说 free 的内存太少了,也是该考虑优化程序或加内存了。

  • 后记

想起来记录 free 的一些东西,缘由是某 java 应用 crash 了,从 crashlog 中看到 crash 时,物理内存剩下仅十几 M ,出错的点是 jvm 内部 malloc 失败,估计很可能是内存不够用导致。于是想了解下内存相关的一些信息, crash log 中输出的内容和 free 命令中输出的第二行结果是一致的。因此想了就关注了 free 这个命令输出的一些信息解释。现在看来,上面的推测可能成立,但是还缺少一些依据,需要当时场景的更多信息才能判断出是不是这个原因。

 

内容参考下面链接汇总而成。

      http://www.linuxso.com/command/free.html

      http://baike.baidu.com/view/418446.htm

      http://www.ddvip.com/mc/os/linux/1413.html

猜你喜欢

转载自xiaotaoge.iteye.com/blog/1697826