|
|
第1行: |
第1行: |
| =free=
| | #重定向 [[FreeBSD桌面初始化]] |
| ==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==
| |
| <pre>
| |
| 常用参数为 -m -g -h -s
| |
| | |
| -b 以Byte为单位显示内存使用情况。
| |
| -k 以KB为单位显示内存使用情况。
| |
| -m 以MB为单位显示内存使用情况。
| |
| -g 以GB为单位显示内存使用情况。
| |
| -o 不显示缓冲区调节列。
| |
| -s<间隔秒数> 持续观察内存使用状况。
| |
| -t 显示内存总和列。
| |
| -V 显示版本信息。
| |
| </pre>
| |
| | |
| ==EXAMPLES==
| |
| <pre>
| |
| 按照离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
| |
| | |
| | |
| </pre>
| |
| | |
| =2020=
| |
| <pre>
| |
| 第一类单位参数:
| |
| | |
| 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
| |
| 第三部分是指交换分区
| |
| ========================
| |
| 当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,
| |
| </pre>
| |
| =参考=
| |
| [[Linux内存查看及一次释放Linux内存问题处理]]
| |
| | |
| [http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html Linux上的free命令详解]
| |
| | |
| [http://www.cnblogs.com/peida/archive/2012/12/25/2831814.html 每天一个linux命令(45):free 命令]
| |
| | |
| [https://blog.csdn.net/wisgood/article/details/12979937 Linux 内存 buffer 和 cache 的区别]
| |
| | |
| | |
| [https://blog.csdn.net/yiyeguzhou100/article/details/78257445 手工drop_caches之后cache值并未减少]
| |
| | |
| [[category:ops]][[category:linux]]
| |