Linux free

转载 2013年12月06日 11:17:16

linux中的free命令大家都很常用,可大家都清楚free输出的各行的意思及它们之间的关系吗?

[root@localhost ~]# free
                              total       used       free     shared    buffers     cached
Mem:                 4038116  4010292   27824      0        205228    1343276
-/+ buffers/cache:             2461788    1576328
Swap:                8289500  254076    8035424

第一行:
total 物理内存总数: 4038116
used 已经使用的内存数: 4010292
free 空闲的内存数: 27824
shared 当前已经废弃不用,总是0
buffers 即Buffer Cache内存数: 205228
cached 即Page Cache内存数: 1343276

关系:total = used + free

第二行:
-/+ buffers/cache的意思相当于:
-buffers/cache 的内存数:2461788 (等于第1行的 used – buffers – cached),实际上是应用程序所使用的内存。
+buffers/cache 的内存数: 1576328 (等于第1行的 free + buffers + cached),是对应用程序来说还剩余的内存。

可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。
对操作系统来讲buffers/cached 都是属于被使用,所以它认为free只有27824.
对应用程序来讲是(-/+ buffers/cach).buffers/cached 是等同可用的,因为buffer/cached是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。

第三行是交换分区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的内存太少了,也是该考虑优化程序或加内存了。

Linux查看应用可用内存-free命令详解

Linux free命令详解,-buffers/cache反映的是被程序实实在在吃掉的内存,看应用可用内存看这个。...
  • loongshawn
  • loongshawn
  • 2016年06月25日 13:18
  • 6792

Linux上的free命令简介

每次使用free时都比较迷惑,对于上面的内容一直都不是很清楚,今天仔细查了以下,和大家一起分享以下: 先看一下free的运行结果:free打印出的内存信息主要分为两种,一种是安装的内存,一种是用磁盘...
  • IT_DREAM_ER
  • IT_DREAM_ER
  • 2016年05月06日 15:30
  • 1960

linux下malloc()和free()的原理及实现

在学习C语言的时候知道了动态内存分配的概念,也知道了malloc()的使用方式,但是一直没有去了解或者认真学习malloc()的实现原理。今天看到关于动态内存分配方面的资料,就整理总结下。在C语言中只...
  • c1s2p3
  • c1s2p3
  • 2016年01月15日 10:41
  • 2575

understand the linux kernel 3rd pdf (it is free)

  • 2011年03月15日 12:21
  • 12.64MB
  • 下载

Linux多线程(free)

  • 2008年03月13日 12:50
  • 132KB
  • 下载

Linux_协议栈(free)

  • 2008年03月13日 12:53
  • 153KB
  • 下载

Embedded Linux Kernel and Driver Development-200605-Free Electrons.pdf

  • 2008年03月23日 16:34
  • 2.68MB
  • 下载

Linux网络编程(free)

  • 2008年03月13日 13:01
  • 1.65MB
  • 下载

(转)Linux内核源代码(free)

  • 2014年10月11日 11:40
  • 1.06MB
  • 下载

Linux上的free命令详解

  • 2013年05月05日 18:09
  • 19KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux free
举报原因:
原因补充:

(最多只允许输入30个字)