日期:2014-05-16  浏览次数:20760 次

Linux性能监测工具之三:free(内存状态)

一、作用

用来显示内存的使用情况,使用权限是所有用户


二、语法

free [-b|-k|-m|-g] [-l] [-o] [-t] [-s delay] [-c count] [-V]

常用参数详解
-b, -k,-m,-g:分别以字节( bytes、KB、MB、GB)为单位显示内存使用情况
-s? delay:显示每隔多少秒数来显示一次内存使用情况(与-c一起使用)
-c:按每隔几秒显示内存使用情况时的刷新次数(与-s一起使用)
-t:显示内存总和列。
-o:不显示缓冲区调节列
-V:free的版本



三、工作原理

1、free命令由procps.*.rpm提供(在Redhat系列的OS上)
2、free命令的所有输出值都是从/proc/meminfo中读出的。 在系统上可能有meminfo(2)这个函数,它就是为了解析/proc/meminfo的。procps这个包自己实现了meminfo()这个 函数。可以下载一个procps的tar包看看具体实现,现在最新版式3.2.8


四、实例分析


total------
总物理内存
used-------
已使用内存,一般情况这个值会比较大
free------
完全未被使用的内存
shared------
应用程序共享内存
buffers------
缓存,主要用于目录方面、inode 值等(ls 大目录可看到这个值增加)
cached------
缓存,用于已打开的文件

1)
第一行:mem,表示 操作系统物理内存使用情况 针对操作系统而言
total 241:表示物理内存总量为241M
used 61:表示总计分配给缓存(包含buffers?与cache,及应用程序 )使用的数量,但其中可能部分缓存并未实际使用,即61M
free 180:表示未被分配的内存数据为180M
share 0:表示应该程序的共享内存为0M
buffers 7:表示系统分配但未被使用的buffers数量
cached 36:表示系统分配但未被使用的cache数量
公式如下:
(1)total=used+free
=61M+180M=241M
(2)used=buffers+cached (maybe add shared also)+application
=7+36+17=60(因采用MB为单位,所以存在误差)

注意: 为了提高磁盘存取效率, Linux 做了一些精心的设计, 除了对dentry 进行缓存(用于VFS, 加速文件路径名到inode 的转换), 还采取了两种主要Cache 方式:Buffer CachePage Cache 。(呵呵!看到了吧,所以针对操作系统的内存使用情况,usered=buffers+cached+application)前者针对磁盘块的读写,后者针对文件inode 的读写。这些Cache 有效缩短了 I/O 系统调用( 比如read,write,getdents) 的时间


2)第二行:-/+?buffers/cached,表示应用程序的内存使用情况 ? (针对应用程序而言
-buffers/cache 应用程序使用的内存大小(等于used- 缓存值 =61-7-36=18M,因采用MB为单位,所以存在误差)
+buffers/cache:
所有可供应用程序使用的内存大小(等于free +缓存值=180+7+36=223M)
所以 -buffer/cache 反映的是: 程序实实在在吃掉的内存;而+buffer/cache反映的是: 可以