日期:2014-05-16 浏览次数:20796 次
一、作用
用来显示内存的使用情况,使用权限是所有用户
二、语法
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 Cache
和Page 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反映的是:
可以