Free

来自linux中国网wiki
跳到导航 跳到搜索

free

NAME and DESCRIPTION

free - Display amount of free and used memory in the system
displays the total amount of free and used physical and swap
      memory in the system, as well as the buffers and caches  used  by
      the kernel.

SYNOPSIS

free [options]

OPTIONS

常用参数为 -m  -g  -h   -s 

-b  以Byte为单位显示内存使用情况。 
-k  以KB为单位显示内存使用情况。 
-m  以MB为单位显示内存使用情况。
-g   以GB为单位显示内存使用情况。 
-o  不显示缓冲区调节列。 
-s<间隔秒数>  持续观察内存使用状况。 
-t  显示内存总和列。 
-V  显示版本信息。

EXAMPLES

按照离CPU由近到远的顺序依次是CPU寄存器、Cache、内存、硬盘,越靠近CPU的存储器容量越小但访问速度越快

 free -g #可用内存为10G 
             total       used       free     shared    buffers     cached
Mem:            15         15          0          0          0          9
-/+ buffers/cache:          5         10(可用内存)
Swap:            0          0          0


1).free -m  # or free -g 
常用参数为 -m  -g  -h   -s 
#注意 正常情况下free不能太小  不能有swap used 不然一般是有问题的,虽然说少量地使用swap是不是影响到系统性能的 
[root@vm ~]# free -m 
             total       used       free     shared    buffers     cached
Mem:           999        256        743          0         21        136
-/+ buffers/cache:         99        900
Swap:         2015          0       2015

2). top ->M 
一般就可以看到这些使用内存比较多的程序的 
如果这两个看到的不多,但是free很少 那就是有问题了 如昨天


root@service]# free
             total       used       free     shared    buffers     cached
Mem:      32940112   30841684    2098428          0    4545340   11363424
-/+ buffers/cache:   14932920   18007192
Swap:     32764556    1944984   30819572

下面是对这些数值的解释:
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行是交换分区SWAP的,也就是我们通常所说的虚拟内存。
区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是2098428KB,已用内存是30841684KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。
如本机情况的可用内存为:
18007156=2098428KB+4545340KB+11363424KB

那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。
所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看内存是否够用的标准.
如果是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。

aws ec2

[root@ip-172-31-17-165 ~]# free -g 
             total       used       free     shared    buffers     cached
Mem:             7          4          3          0          0          3
-/+ buffers/cache:          0          6
Swap:            0          0          0


2020

第一类单位参数:

1) -b, –bytes, 以Byte为单位显示内存使用情况
2) -k, –kilo, 以KB为单位, 这也是默认值
3) -m, –mega, 以MB为单位显示内容使用情况
4) -g, –giga, 以GB为单位显示内存使用情况

第二类参数:

1)、 -h, –human, 自动将数值转换为人类易读形式
2)、 -c, –count, 展示结果count次,需与-s配合使用
3)、 -s, –seconds, 动态刷新内存使用情况的间隔

free -m各字段含义
第一部分Mem行:
========================
total 内存总数: 3865M 
used 已经使用的内存数: 1545M 
free 空闲的内存数: 2320M 
shared 多个进程共享的内存总额 196M 
buffers Buffer 缓存内存数: 176M 
cached Page 缓存内存数:569M 
关系:total (3865M) = used(1545M) + free(2320M)
第二部分(-/+ buffers/cache):
========================
(-buffers/cache) used内存数:798M 
(指的第一部分Mem行中的used – buffers – cached) 
即为1545 – 176 – 569 = 800 取整时计算差异 2M

(+buffers/cache) free内存数: 3066M 
(指的第一部分Mem行中的free + buffers + cached) 
即为2320 + 176 + 569 = 3065 取整时计算差异 1M
第三部分是指交换分区
========================
当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,

参考

Linux内存查看及一次释放Linux内存问题处理

Linux上的free命令详解

每天一个linux命令(45):free 命令

Linux 内存 buffer 和 cache 的区别


手工drop_caches之后cache值并未减少