free命令
简单命令使用
写在最前面,markdown已经熟悉了,但一直没用过表格操作,刚巧整理了一篇日志,试试markdown的表格使用
free 不加参数,默认以kb为单位显示
free -m 以M为单位
free -g 以G为单位
语法讲解
语 法: free [-bkmotV][-s <间隔秒数>]
补充说明:free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
参 数:
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-o 不显示缓冲区调节列。
-s<间隔秒数> 持续观察内存使用状况。
-t 显示内存总和列。
-V 显示版本信息。
常用操作:
free //以KB为单位,显式系统内存使用情况
free -ml -s 1 //每秒以M为单位,显式系统内存详细使用情况。
free -c 4 -s 2 //为KB为单位,每2秒显式系统内存使用情况,一共显示4次
参数讲解
||total|used|free|shared|buffers|cached
---|---|---|---|---|---|---|---
Mem:|1572988|1509260|63728|0|62800|277888
-/+ buffers/cache:||1168572|404416|||
Swap:|2096472|16628|2079844|||
分割线
||total|used|free|shared|buffers|cached
---|---|---|---|---|---|---|---
Mem:|1572988|1509260|63728|0|62800|277888
|||所有使用了的内存,包括可回收|实际剩余内存,不包括可回收|||
-/+ buffers/cache:||1168572|404416|||
|||真正使用的,不加可回收的内存|所有可用内存,包括可回收|||
Swap:|2096472|16628|2079844|||
分割线
Memory that is | You'd call it | Linux calls it |
---|---|---|
used by applications | Used | Used |
used, but can be made available | Free (or Available) | Used (and Available) |
not used for anything | Free | Free |
Mem:表示物理内存统计
total:表示物理内存总量(total = used + free)
used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
free:未被分配的内存。
shared:共享内存,一般系统不会用到,这里也不讨论。
buffers:系统分配但未被使用的buffers 数量。即剩余量
cached:系统分配但未被使用的cache 数量。
Cache能有效缩短了 I/O系统调用(比如read,write,getdents)的时间。
windows,无论你的真实物理内存有多少,他都要拿硬盘交换文件来读
这也就是windows为什么常常提示虚拟空间不足的原因.
swap:只要不用swap的交换 空间,就不用担心自己的内存太少
当可用内存少于额定值的时候,就会开始进行交换.
如何看额定值(RHEL4.0):#cat /proc/meminfo
扩展
- 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 use.
对于应用程序来说,buffers/cached 是等于可用的,
因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说 可用内存=系统free memory+buffers+cached.
buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.
cached是用来给文件做缓冲。
那就是说:buffers是用来存储,目录里面有什么内容,权限等等。
而cached直接用来记忆我们打开的文件,
先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。
- buffers/cached好处
Linux 内存管理做了很多精心的设计,除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),
还采取了两种主要Cache方式:Buffer Cache和Page Cache,目的就是为了提升磁盘IO的性能。
从低速的块设备上读取数据会暂时保存在内存中,即使数据在当时已经不再需要了,但在应用程序下一次访问该数据时,
它可以从内存中直接读取,从而绕开低速的块设备,从而提高系统的整体性能。
而Linux会充分利用这些空闲的内存,设计思想是内存空闲还不如拿来多缓存一些数据,
等下次程序再次访问这些数据速度就快了,而如果程序要使用内存而系统中内存又不足时,
这时不是使用交换分区,而是快速回收部分缓存,将它们留给用户程序使用。
因此,可以看出,buffers/cached真是百益而无一害,
真正的坏处可能让用户产生一种错觉——Linux耗内存!
- 实验证明
下面通过实验来验证上面的结论:
我们先后读入一个大文件,比较两次读入的实践:
1.首先生成一个1G的大文件
#dd if=/dev/zero of=bigfile bs=1M count=1000
2.清空缓存
#echo 3 | tee /proc/sys/vm/drop_caches
3.读入这个文件,测试消耗的时间
#time cat bigfile > /dev/null
4.再次读入该文件,测试消耗的时间
"世界上只有一种真正的英雄主义,就是认清了生活的真相后,还依然执着地热爱它。"
——罗曼·罗兰