转:http://blog.is36.com/linux_free_command_for_memory/node
linux下在终端环境下可使用free命令看到系统实际使用内存的状况,通常用free -m方式查看内存占用状况(兆为单位)。而系统实际可用内存是否是free部分呢,不是的,系统实际内存占用以及可用内存有以下几个加减法:linux
total used free shared buffers cached
Mem: 128 119 8 0 1 22
-/+ buffers/cache: 95 32
swap: 255 0 255windows
第1行Mem数据:缓存
第2行-/+ buffers/cache:bash
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是能够挪用的内存总数。服务器
第三行数据是交换分区SWAP的,也就是咱们一般所说的虚拟内存。ide
为了提升磁盘存取效率, Linux作了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采起了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(好比read,write,getdents)的时间。工具
感兴趣的能够进一步参考文件/proc/meminfo,free命令就是根据它的信息生成的。free命令的源码可从procps-xxx-.src.rpm获取,xxx为版本号,好比procps-3.2.3-5.3.src.rpm。性能
系统管理员必须维护他们服务器的健康运行。其中一个重要的部分就是内存。当服务器内存使用率太高时,它会下降服务器的性能。Linux有一个称为 free 的工具,来监控内存使用率。测试
free 命令是一个显示系统中空闲和已用内存大小的工具。free 命令的输出和 top 命令类似。大多数Linux发行版已经含有 free 命令。
想要运行,只需在控制台输入free 便可。不带选项运行会显示一个以KB为单位的默认输出。
$ free
从上面的截图咱们看到:
译注:关于Buffers和Cached的区别,来自 http://www.taobaotesting.com/blogs/qa?bid=2265 的一段解释以下:
buffers是指用来给块设备作的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.
cached是用来给文件作缓冲。
那就是说:buffers是用来存储,目录里面有什么内容,权限等等。而cached直接用来记忆咱们打开的文件
当你看见 buffer/cache 的空闲空间低或者 swap 的空闲空间低,说明内存须要升级了。这意味这内存利用率很高。请注意 shared(共享)内存列应该被忽略 ,由于它已经被废弃了。
如咱们先前提到的,默认 free 会以 KB 为单位显示信息。free 一样提供给咱们 b (B), -k (KB), -m (MB), -g (GB) and –tera (TB)这些单位。要显示咱们想要的单位,只要选择一个并在 free 后面跟上。下面一个是以 MB 为单位的输出样例。
$ free -m
这个技巧一样适用于-b, -k, -g 以及 –tera 选项。
free 一样提供了-h选项,这意味着适于人类可读(译注:系统上可能并不存在-h选项,已被-m取代)。那么这与其它的选项有什么不一样呢,如-m(MB)选项? 可见的最大不一样是-h选项会在数字后面加上适于人类可读的单位。让咱们看一个例子。
$ free -h
如咱们一块儿看到的,在1,0数字后这里是G(GB)字母。当数字并无达到GB时,free足够聪明来知道并在每一个数字后面跟上合适的单位。后面的M - 数字929告诉咱们它有929MB(译注: 原文为929 number tell us its 969 Megabytes,这里应该为输入错误)。
做为一个状态检查工具,最好的统计内存利用率的方法是使用延迟间隔。这么作的话,咱们可使用-s选项后面跟上咱们想要间隔的N秒数。咱们能够在后面合并几个选项来使输出知足咱们的需求。假如咱们想要每3秒统计一次内存利用率而且适于人类可读,那么就像这样作:
$ free -hs 3
若是咱们想要知道高低内存统计,咱们可使用-l选项。下面是一个例子。
$ free -l
若是咱们须要每列的总计信息,咱们能够在 free 命令后面跟上 -t 选项。这会在字底部额外加入一行显示。
$ free -t
除了vmstat之外,free 命令也是一个用于统计内存利用率的简单统计工具。用这个你能够快速查看你的 Linux 内存信息。free 命令使用 /proc/meminfo 做为基准来显示内存利用率信息。如往常同样,你能够在控制台下输入 man free 来获取更多关于 free 的信息。
前段时间有个项目的用C写的,性能测试时发现内存泄露问题。关于怎么观察内存使用问题,free是很好用的一个命令。
bash-3.00$ free
total used free shared buffers cached
Mem: 1572988 1509260 63728 0 62800 277888
-/+ buffers/cache: 1168572 404416
Swap: 2096472 16628 2079844
Mem:表示物理内存统计
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用状况,这里咱们不去关心。
系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并非第一行free 标记的 16936Kb,它仅表明未被分配的内存。
第1行 Mem: total:表示物理内存总量。
used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
free:未被分配的内存。
shared:共享内存,通常系统不会用到,这里也不讨论。
buffers:系统分配但未被使用的buffers 数量。
cached:系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。 total = used + free 第2行 -/+ buffers/cached: used:也就是第一行中的used - buffers-cached 也是实际使用的内存总量。
free:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。 free 2= buffers1 + cached1 + free1 //free2为第二行、buffers1等为第一行
buffer 与cache 的区别
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 use 第3行: 第三行所指的是从应用程序角度来看,对于应用程序来讲,buffers/cached 是等于可用的,由于buffer/cached是为了提升文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
因此从应用程序的角度来讲,可用内存=系统free memory+buffers+cached.
接下来解释何时内存会被交换,以及按什么方交换。
当可用内存少于额定值的时候,就会开会进行交换.
如何看额定值(RHEL4.0):
#cat /proc/meminfo
交换将经过三个途径来减小系统中使用的物理页面的个数:
1.减小缓冲与页面cache的大小,
2.将系统V类型的内存页面交换出去,
3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。
事实上,少许地使用swap是否是影响到系统性能的。
下面是buffers与cached的区别。
buffers是指用来给块设备作的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.
cached是用来给文件作缓冲。
那就是说:buffers是用来存储,目录里面有什么内容,权限等等。
而cached直接用来记忆咱们打开的文件,若是你想知道他是否是真的生效,你能够试一下,前后执行两次命令#man X ,你就能够明显的感受到第二次的开打的速度快不少。
实验:在一台没有什么应用的机器上作会看得比较明显。记得实验只能作一次,若是想多作请换一个文件名。
#free
#man X
#free
#man X
#free
你能够前后比较一下free后显示buffers的大小。
另外一个实验:
#free
#ls /dev
#free
你比较一下两个的大小,固然这个buffers随时都在增长,但你有ls过的话,增长的速度会变得快,这个就是buffers/chached的区别。
由于Linux将你暂时不使用的内存做为文件和数据缓存,以提升系统性能,当你须要这些内存时,系统会自动释放(不像windows那样,即便你有不少空闲内存,他也要访问一下磁盘中的pagefiles)
使用free命令
将used的值减去 buffer和cache的值就是你当前真实内存使用 ————– 对操做系统来说是Mem的参数.buffers/cached 都是属于被使用,因此它认为free只有16936.
对应用程序来说是(-/+ buffers/cach).buffers/cached 是等同可用的,由于buffer/cached是为了提升 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。 因此,以应用来看看,以(-/+ buffers/cache)的free和used为主.因此咱们看这个就行了.另外告诉你们 一些常识.Linux为了提升磁盘和内存存取效率, Linux作了不少精心的设计, 除了对dentry进行缓存(用于 VFS,加速文件路径名到inode的转换), 还采起了两种主要Cache方式:Buffer Cache和Page Cache。 前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache能有效缩短了 I/O系统调用(好比read,write,getdents)的时间。 记住内存是拿来用的,不是拿来看的.不象windows,不管你的真实物理内存有多少,他都要拿硬盘交换 文件来读.这也就是windows为何经常提示虚拟空间不足的缘由.大家想一想,多无聊,在内存还有大部分 的时候,拿出一部分硬盘空间来充当内存.硬盘怎么会快过内存.因此咱们看linux,只要不用swap的交换 空间,就不用担忧本身的内存太少.若是经常swap用不少,可能你就要考虑加物理内存了.这也是linux看 内存是否够用的标准哦.