这篇文章将为大家详细讲解有关Linux系统命令free的使用方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
Linux系统中free命令最主要的用途就是用来显示内存的状态,其中包括实体内存,虚拟的交换文件内存,共享内存区段等。
free命令使用
首先是要 free –help命令,来查看下free命令的用法。
root@ubuntu116:~# free --help Usage: free [options] Options: -b, --bytes show output in bytes -k, --kilo show output in kilobytes -m, --mega show output in megabytes -g, --giga show output in gigabytes --tera show output in terabytes -h, --human show human-readable output --si use powers of 1000 not 1024 -l, --lohi show detailed low and high memory statistics -o, --old use old format (without -/+buffers/cache line) -t, --total show total for RAM + swap -s N, --seconds N repeat printing every N seconds -c N, --count N repeat printing N times, then exit --help display this help and exit -V, --version output version information and exit For more details see free(1). 123456789101112131415161718192021222324
下面我们来测试下几个常用的options
2.1 free -b
root@ubuntu116:~# free -b
total used free shared buffers cached
Mem: 67529682944 64533520384 2996162560 213880832 351289344 58317025280
-/+ buffers/cache: 5865205760 61664477184
Swap: 68690112512 7532544 68682579968
您在 /var/mail/root 中有新邮件
root@ubuntu116:~#
2.2 free -k
root@ubuntu116:~# free -k
total used free shared buffers cached
Mem: 65946956 63518300 2428656 208900 343148 56952900
-/+ buffers/cache: 6222252 59724704
Swap: 67080188 7356 67072832
您在 /var/mail/root 中有新邮件
root@ubuntu116:~#
2.3 free -m
root@ubuntu116:~# free -m
total used free shared buffers cached
Mem: 64401 62458 1942 204 335 55618
-/+ buffers/cache: 6505 57895
Swap: 65507 7 65500
root@ubuntu116:~#
2.4 free -g
root@ubuntu116:~# free -g
total used free shared buffers cached
Mem: 62 60 1 0 0 54
-/+ buffers/cache: 6 56
Swap: 63 0 63
root@ubuntu116:~#
2.5 free -h
root@ubuntu116:~# free -h
total used free shared buffers cached
Mem: 62G 60G 2.2G 204M 336M 54G
-/+ buffers/cache: 6.1G 56G
Swap: 63G 7.2M 63G
root@ubuntu116:~#
2.6 free -l
显示详细的低内存和高内存统计信息
root@ubuntu116:~# free -l
total used free shared buffers cached
Mem: 65946956 63396736 2550220 209228 344632 56953528
Low: 65946956 63396736 2550220
High: 0 0 0
-/+ buffers/cache: 6098576 59848380
Swap: 67080188 7356 67072832
root@ubuntu116:~#
2.7 free -o
使用旧格式(没有 -/+buffers/cache 这一行)
root@ubuntu116:~# free -o
total used free shared buffers cached
Mem: 65946956 64045184 1901772 209256 344760 56969912
Swap: 67080188 7356 67072832
root@ubuntu116:~#
2.8 free -t
展示RAM和swap的合计
root@ubuntu116:~# free -t
total used free shared buffers cached
Mem: 65946956 64118724 1828232 209616 345348 56973588
-/+ buffers/cache: 6799788 59147168
Swap: 67080188 7356 67072832
Total: 133027144 64126080 68901064
root@ubuntu116:~#
2.9 free -s N
每相隔N秒重复打印一次内存信息,直到你按下 Ctrl + c
root@ubuntu116:~# free -s 3
total used free shared buffers cached
Mem: 65946956 64138880 1808076 209708 345616 56957708
-/+ buffers/cache: 6835556 59111400
Swap: 67080188 7356 67072832
total used free shared buffers cached
Mem: 65946956 64073124 1873832 209716 345616 56957720
-/+ buffers/cache: 6769788 59177168
Swap: 67080188 7356 67072832
total used free shared buffers cached
Mem: 65946956 64167628 1779328 209720 345616 56957732
-/+ buffers/cache: 6864280 59082676
Swap: 67080188 7356 67072832
total used free shared buffers cached
Mem: 65946956 64159796 1787160 209720 345620 56957728
-/+ buffers/cache: 6856448 59090508
Swap: 67080188 7356 67072832
total used free shared buffers cached
Mem: 65946956 64166776 1780180 209724 345628 56957740
-/+ buffers/cache: 6863408 59083548
Swap: 67080188 7356 67072832
total used free shared buffers cached
Mem: 65946956 63093948 2853008 209724 345632 56957756
-/+ buffers/cache: 5790560 60156396
Swap: 67080188 7356 67072832
2.10 free -c N
重复打印N次内存信息,然后退出
root@ubuntu116:~# free -c 3
total used free shared buffers cached
Mem: 65946956 64199120 1747836 209780 345744 56974404
-/+ buffers/cache: 6878972 59067984
Swap: 67080188 7356 67072832
total used free shared buffers cached
Mem: 65946956 63949560 1997396 209780 345744 56974404
-/+ buffers/cache: 6629412 59317544
Swap: 67080188 7356 67072832
total used free shared buffers cached
Mem: 65946956 64093104 1853852 209780 345744 56974408
-/+ buffers/cache: 6772952 59174004
Swap: 67080188 7356 67072832
root@ubuntu116:~#
2.11 free -V
显示版本号信息
root@ubuntu116:~# free -V free from procps-ng 3.3.9 root@ubuntu116:~#
三、free命令输出内容名词解释
root@ubuntu116:~# free
total used free shared buffers cached
Mem: 65946956 64255040 1691916 213840 356892 56805760
-/+ buffers/cache: 7092388 58854568
Swap: 67080188 7356 67072832
root@ubuntu116:~#
3.1 Mem,-/+ buffers/cache,Swap 解释
我们看到free命令有三行内容:Mem,-/+ buffers/cache,Swap,代表的内容如下:
名称 | 代表的内容 |
---|---|
Mem | 内存的使用情况 |
-/+ buffers/cache | 表示物理内存已用多少,可用多少 |
Swap | 交换空间的使用情况 |
3.2 total,used,free,shared,buffers,cached 解释
列的内容是total,used,free,shared,buffers,cached,代表的内容如下:
名称 | 代表的内容 |
---|---|
total | 总量 |
used | 已使用的 |
free | 空闲的 |
shared | 共享的,在linux里面有很多共享内存,比如一个libc库,很多程序调用,但实际只存一份 |
buffers | 缓存,可回收 |
cached | 缓存,可回收 |
关于buffers和cached的区别 这里有个地方要注意,关于buffers和cached的区别。 关于free命令里面的cached、buffers的区别,下面一幅图可以表达: (图片引用自 https://blog.csdn.net/juS3Ve/article/details/79191634 宋宝华老师的博客)
cached和buffers都可以读写,它们唯一的区别就是:buffers以裸设备或分区为背景,cached以文件系统里的文件为背景。
比如 cat /dev/sda1 > /dev/null,那/dev/sda1的内容进入buffers, 如果cat /opt/test.py > /dev/null,则/opt/test.py的内容进入cached。
在有些时候buffer和cache这两个词经常混用。不过在一些比较低层的软件里是要区分这两个词的,看老外的洋文:
A buffer is something that has yet to be “written” to disk.
A cache is something that has been “read” from the disk and stored for later use. 也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。
Linux和其他成熟的操作系统(例如windows),为了提高IO read的性能,总是要多cache一些数据,这也就是为什么Mem这一行cached 比较大,而Mem这一行free 比较小的原因。
四、free命令输出内容计算公司
下面我们来计算一下free命令各个参数是怎么计算出来的,参考下面的图片 (图片引用自 https://blog.csdn.net/juS3Ve/article/details/79191634 宋宝华老师的博客)
4.1 关于Mem这一行的total的计算公式
计算公式为 : total = used + free
total (65946956) = used (64255040) + free (1691916)
比如本例中,Mem的used是64255040,free是1691916,加起来刚好是total的65946956.
4.2 关于 -/+ buffers/cache这一行的used的计算公式
free输出的第二行是从一个应用程序的角度看系统内存的使用情况。
-/+ buffers/cache这一行的used,即 -buffers/cache ,表示一个应用程序认为系统被用掉多少内存,实实在在吃掉的内存
计算公式为: -/+ buffers/cache的used = Mem这一行的used - Mem这一行的buffers - Mem这一行的cached
`-/+ buffers/cache的used (7092388) = Mem这一行的used (64255040) – Mem这一行的buffers (356892)- 去Mem这一行的cached (56805760)
比如本例中,-/+ buffers/cache的used是7092388,这个值是由Mem这一行的used 64255040,减去Mem这一行的buffers 356892,再减去Mem这一行的cached 56805760。
4.3 关于 -/+ buffers/cache这一行的free的计算公式
-/+ buffers/cache这一行的free,即 +buffers/cache ,表示一个应用程序认为系统还有多少内存,可以挪用的内存总数
计算公式为: -/+ buffers/cache的free = Mem这一行的free + Mem这一行的buffers + Mem这一行的cached
-/+ buffers/cache的free (58854568) = Mem这一行的free (1691916) + Mem这一行的buffers (356892) + Mem这一行的cached (56805760)
比如本例中,-/+ buffers/cache的free 是58854568,这个值是由Mem这一行的free 1691916,加上Mem这一行的buffers 356892,再加上Mem这一行的cached 56805760
因为被系统cache和buffer占用的内存可以被快速回收,所以通常-/+ buffers/cache这一行的free会比Mem这一行的free大很多。
4.4 关于Swap这一行的total的计算公式
计算公式为 : total = used + free
total (67080188) = used (7356) + free (67072832)
比如本例中,Swap的used是7356,free是67072832,加起来刚好是total的67080188.
4.5 关于估算空闲的物理内存
估算空闲的物理内存时可参考-/+ buffers/cache的free的值,但实际的可用内存要小于这个值,因为不能所有的buffers和cached都释放。
我想大家看了上面,还是很晕.第一部分(Mem)与第二部分(-/+ buffers/cache)的结果中有关used和free为什么这么奇怪?
其实我们可以从二个方面来解释.
对操作系统来讲是Mem这一行的buffers/cached 都是属于被使用,所以它认为free只有1691916
对应用程序来讲是-/+ buffers/cach。 buffers/cached 是等同可用的,因为buffer/cached是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。
五 关于 buffer和cache
5.1 什么是buffer/cache?
buffer 和 cache 是两个在计算机技术中被用滥的名词,放在不通语境下会有不同的意义。
在 Linux 的内存管理中,这里的 buffer 指 Linux 内存的: Buffer cache 。这里的 cache 指 Linux 内存中的: Page cache 。翻译成中文可以叫做缓冲区缓存 和 页面缓存。 在历史上,它们一个( buffer )被用来当成对 io 设备写的缓存,而另一个( cache )被用来当作对 io 设备的读缓存,这里的 io 设备,主要指的是块设备文件和文件系统上的普通文件。 但是现在,它们的意义已经不一样了。 在当前的内核中, page cache 顾名思义就是针对内存页的缓存,说白了就是,如果有内存是以 page 进行分配管理的,都可以使用 page cache 作为其缓存来管理使用。 当然,不是所有的内存都是以页( page )进行管理的,也有很多是针对块( block )进行管理的,这部分内存使用如果要用到 cache 功能,则都集中到 buffer cache 中来使用。(从这个角度出发,是不是 buffer cache 改名叫做 block cache 更好?)然而,也不是所有块( block )都有固定长度,系统上块的长度主要是根据所使用的块设备决定的,而页长度在 X86 上无论是 32 位还是 64 位都是 4k 。
明白了这两套缓存系统的区别,就可以理解它们究竟都可以用来做什么了。
5.2 什么是 page cache
Page cache 主要用来作为文件系统上的文件数据的缓存来用,尤其是针对当进程对文件有 read / write 操作的时候。如果你仔细想想的话,作为可以映射文件到内存的系统调用: mmap 是不是很自然的也应该用到 page cache ?在当前的系统实现里, page cache 也被作为其它文件类型的缓存设备来用,所以事实上 page cache 也负责了大部分的块设备文件的缓存工作。
5.3 什么是 buffer cache
Buffer cache 则主要是设计用来在系统对块设备进行读写的时候,对块进行数据缓存的系统来使用。这意味着某些对块的操作会使用 buffer cache 进行缓存,比如我们在格式化文件系统的时候。一般情况下两个缓存系统是一起配合使用的,比如当我们对一个文件进行写操作的时候, page cache 的内容会被改变,而 buffer cache 则可以用来将 page 标记为不同的缓冲区,并记录是哪一个缓冲区被修改了。这样,内核在后续执行脏数据的回写( writeback )时,就不用将整个 page 写回,而只需要写回修改的部分即可。
5.4 如何回收 cache ?
Linux 内核会在内存将要耗尽的时候,触发内存回收的工作,以便释放出内存给急需内存的进程使用。一般情况下,这个操作中主要的内存释放都来自于对 buffer / cache 的释放。尤其是被使用更多的 cache 空间。既然它主要用来做缓存,只是在内存够用的时候加快进程对文件的读写速度,那么在内存压力较大的情况下,当然有必要清空释放 cache ,作为 free 空间分给相关进程使用。所以一般情况下,我们认为 buffer/cache 空间可以被释放,这个理解是正确的。
但是这种清缓存的工作也并不是没有成本。理解 cache 是干什么的就可以明白清缓存必须保证 cache 中的数据跟对应文件中的数据一致,才能对 cache 进行释放。所以伴随着 cache 清除的行为的,一般都是系统 IO 飙高。因为内核要对比 cache 中的数据和对应硬盘文件上的数据是否一致,如果不一致需要写回,之后才能回收。
人工触发缓存清除
在系统中除了内存将被耗尽的时候可以清缓存以外,我们还可以使用下面这个文件来人工触发缓存清除的操作:
[root@tencent64 ~]# cat /proc/sys/vm/drop_caches
方法是:
echo 1 > /proc/sys/vm/drop_caches
当然,这个文件可以设置的值分别为 1 、 2 、 3 。它们所表示的含义为:
echo 1 > /proc/sys/vm/drop_caches
表示清除 pagecache 。
echo 2 > /proc/sys/vm/drop_caches
表示清除回收 slab 分配器中的对象(包括目录项缓存和 inode 缓存)。 slab 分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的 pagecache 。
echo 3 > /proc/sys/vm/drop_caches 表示清除 pagecache 和 slab 分配器中的缓存对象。
什么是Linux系统
Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统,使用Linux能运行主要的Unix工具软件、应用程序和网络协议。
关于Linux系统命令free的使用方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。