linux命令之free
2016-04-21 12:01
330 查看
对LINUX里面的free命令做个总结,好吧,其实真正原因是最近面试反复被问,而自己又知道的不是很清楚
free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等
首先free --help 查看一下free命令的可选参数:
一下文章引用自http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.htm
下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(Free Output)。例如:FO[2][1] = 24677460
FO[3][2] = 10321516
free的输出一共有四行,第四行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free),这个比较清楚,不说太多。 free输出地第二行和第三行是比较让人迷惑的。这两行都是说明内存使用情况的。第一列是总量(total),第二列是使用量(used),第三列是可用量(free)。 第二行的输出是从操作系统(OS)来看的。也就是说,从OS的角度来看,计算机上一共有:24677460KB(缺省时free的单位为KB)物理内存,即FO[2][1];
在这些物理内存中有23276064KB(即FO[2][2])被使用了;
还用1401396KB(即FO[2][3])是可用的;
这里得到第一个等式:FO[2][1] = FO[2][2] + FO[2][3]
FO[2][4]表示被几个进程共享的内存的,现在已经deprecated,其值总是0(当然在一些系统上也可能不是0,主要取决于free命令是怎么实现的)。FO[2][5]表示被OS buffer住的内存。FO[2][6]表示被OS cache的内存。那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。 第三行是从一个应用程序的角度看系统内存的使用情况。对于FO[3][2],即-buffers/cache,表示一个应用程序认为系统被用掉多少内存;
对于FO[3][3],即+buffers/cache,表示一个应用程序认为系统还有多少内存;
因为被系统cache和buffer占用的内存可以被快速回收,所以通常FO[3][3]比FO[2][3]会大很多。这里还用两个等式:FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]
FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]
这二者都不难理解。 free命令由procps.*.rpm提供(在Redhat系列的OS上)。free命令的所有输出值都是从/proc/meminfo中读出的。 第四行是交换分区SWAP的,也就是我们通常所说的虚拟内存。
如果机子的swap虚拟内存被用很多,就说明物理内存不够用
free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等
首先free --help 查看一下free命令的可选参数:
Usage: free [options] Options: -b, --bytes //以Byte为单位显示内存使用情况 -k, --kilo //以KB为单位显示内存使用情况 -m, --mega //以MB为单位显示内存使用情况 -g, --giga //以MB为单位显示内存使用情况 --tera -o //不显示缓冲区调节列(centos7.2有这个选项) -h, --human //以人类可读的方式输出(即带有单位) --si //使用的进制为1000而不是1024 -l, --lohi //显示详细的低和高内存统计信息 -t, --total //显示总的内存 -s N, --seconds N //<间隔秒数> 持续观察内存使用情况 -c N, --count N //观察接下来n秒内的每一秒的内存使用情况 -V, --version //显示版本信息
一下文章引用自http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.htm
下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(Free Output)。例如:FO[2][1] = 24677460
FO[3][2] = 10321516
free的输出一共有四行,第四行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free),这个比较清楚,不说太多。 free输出地第二行和第三行是比较让人迷惑的。这两行都是说明内存使用情况的。第一列是总量(total),第二列是使用量(used),第三列是可用量(free)。 第二行的输出是从操作系统(OS)来看的。也就是说,从OS的角度来看,计算机上一共有:24677460KB(缺省时free的单位为KB)物理内存,即FO[2][1];
在这些物理内存中有23276064KB(即FO[2][2])被使用了;
还用1401396KB(即FO[2][3])是可用的;
这里得到第一个等式:FO[2][1] = FO[2][2] + FO[2][3]
FO[2][4]表示被几个进程共享的内存的,现在已经deprecated,其值总是0(当然在一些系统上也可能不是0,主要取决于free命令是怎么实现的)。FO[2][5]表示被OS buffer住的内存。FO[2][6]表示被OS cache的内存。那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。 第三行是从一个应用程序的角度看系统内存的使用情况。对于FO[3][2],即-buffers/cache,表示一个应用程序认为系统被用掉多少内存;
对于FO[3][3],即+buffers/cache,表示一个应用程序认为系统还有多少内存;
因为被系统cache和buffer占用的内存可以被快速回收,所以通常FO[3][3]比FO[2][3]会大很多。这里还用两个等式:FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]
FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]
这二者都不难理解。 free命令由procps.*.rpm提供(在Redhat系列的OS上)。free命令的所有输出值都是从/proc/meminfo中读出的。 第四行是交换分区SWAP的,也就是我们通常所说的虚拟内存。
如果机子的swap虚拟内存被用很多,就说明物理内存不够用
相关文章推荐
- 10 篇对初学者和专家都有用的 Linux 命令教程
- 设计模式之行为型模式 - 调用行为的传递问题
- linux mknod命令与磁盘对应一例
- 通晓网络测试常用命令
- FTP命令大全
- Netsh.exe 工具和命令行开关说明
- Ruby基本的环境变量设置以及常用解释器命令介绍
- Oracle数据库执行脚本常用命令小结
- set 命令特殊用法
- PowerShell重启服务命令Restart-Service详细介绍
- Netsh 命令备份和恢复网络设置
- DOS命令全集(一)
- 批处理中使用系统路径的命令
- 使用BAT一句话命令实现快速合并JS、CSS
- 三个有用的 Switch 命令
- 写批处理必备的一些命令参数使用技巧
- win运行字符命令
- Powershell小技巧之使用WS-Man来调用PowerShell命令
- MySQL基本命令、常用命令总结
- 数据库基本概念面试必问