free命令是读取/proc/meminfo这个文件的信息.
free命令的参数
-b -k -m -g :分别以Byte,KB,MB,GB为单位显示内存的使用情况
-l :show detailed low and high memory statistics
-o :使用旧的格式显示内存使用的信息,没有描述-+/buffers /cache信息这一行
-t:显示内存总和列
-s:<间隔秒数> 持续观察内存使用状况
-c:结合参数-s使用,表示更新多少次
-a:show available memory if exported by kernel(>80 characters per line)
-V:显示free命令版本信息并退出该命令
free指标
指标 |
指标意义 |
total |
总的物理内存大小。total=used + free |
used |
已经使用的物理内存。一般情况这个值比较大。used=buffers + cached (maybe add shared also)+ -buffers/cache(used) |
free |
完全未使用的物理内存 |
shared |
应用程序共享的物理内存 |
buffers |
缓存,主要用于块设备缓存,例如用户目录、inode值等(ls大目录可以看到这个值增加) |
cached |
缓存,主要用于缓存文件。 |
指标 |
指标意义 |
前个值表示-buffers/cache |
应用程序使用的内存大小,used减去缓存值:-buffers/cache=used-buffers-cached |
后个值表示+buffers/cache |
所有可供应用程序使用的内存大小,free加上缓存值:+buffers/cache=free+buffers+cached |
buffers:包括metadata(元数据)+ tracking in-flight pages
元数据:任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元
数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode...)等等。在集群文件系统中,分布信息包括文件在磁盘上的位置以及磁盘在集群中的位置。用户需要操作一个文件必须首先得到它的元数据,才能定位到文件的位置并且得到文件的内容或相关属性。
cache:是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了, 若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置 ,把不再读的内容不断往后排,直至从中删除。缓存(cache)实际并不是缓冲文件的,而是缓冲块的, 块是磁盘的最小单元(在Linux中,它们通常是1KB)。这样,目录、超级块、其它文件系统的 薄记数据以及非文件系统的磁盘数据都可以被缓冲了如果缓存有固定的大小,那么缓存太大了也不好, 因为这会使得空闲的内存太小而导致进行交换操作(这同样是慢的)。为了最有效地使用实际内存, Linux自动地使用所有空闲的内存作为高速缓冲,当程序需要更多的内存时,它也会自动地减小缓冲的大小。 buffers:是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道, 从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写磁盘),也可以通过sync命令手动清空 缓冲。举个例子吧:我这里有一个的U盘,我往里面cp一个的 MP3,但U盘的灯没有跳动,过了一会儿 (或者手动输入sync)U盘的灯就跳动起来了。卸载设备时会清空缓冲,所以有些时候卸载一个设备时要等上 几秒钟。buffer是由各种进程分配的,由进程和系统一起管理.被用在如输入队列等方面,一个简单的例子 如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。 cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方 便下次被访问,这样可提供系统性能。 综上所述可以理解为cache系统管理, buffer由进程和系统一起管理.