一:作用
free 显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存
二:语法
通过 --help、–info、–men 可以查看命令相关选项
注意:free 命令区分大小写
注解如下:
-b, --bytes show output in bytes 以bytes单位展示
-k, --kilo show output in kilobytes 以k单位展示
-m, --mega show output in megabytes 以m单位展示
-g, --giga show output in gigabytes 以g单位展示
--tera show output in terabytes
--peta show output in petabytes
-h, --human show human-readable output 有好展示
--si use powers of 1000 not 1024
-l, --lohi show detailed low and high memory statistics 显示高低内存的利用率
-t, --total show total for RAM + swap 显示linux的全部内存
-s N, --seconds N repeat printing every N seconds 表示每隔N秒打印一次内存信息,直到用ctrl+c结束
-c N, --count N repeat printing N times, then exit 表示重复打印内存信息N次
-w, --wide wide output 表示buff、cache 分开展示
--help display this help and exit
-V, --version output version information and exit 表示free版本
示例:
总结:free -h -t 是最友好的
三:详解
Men行: 代表内存使用情况
Swap行:代表交换区使用情况
Total行:代表总数据
total列:代表总大小
used列:代表使用大小
free列:代表空闲大小
shared列:代表分享大小
buff/cache列:代表buff/cache占用的空间大小
available列:代表被应用程序占用的大小
四:buffer和cache
先说一下题外话:
计算机硬件组成:CPU,存储器,输入输出设备(I/O),其他(主板,电源等)
CPU:运算器,控制器
存储器:内部存储器(ROM/RAM),外部存储器(磁盘等)
I/O:输入设备(鼠标/键盘),输出设备(显示器/打印机)
从性能分析:
-CPU缓存>内存>磁盘>数据库
从性能来看内存是介于CPU和磁盘,在实际中内存是CPU和磁盘的桥梁。buffer和cache是内存的不同的体现,接下来简单分析对buffer和cache的理解
1.buffer:
A buffer is something that has yet to be “written” to disk.翻译过来就是:buffer就是写入到磁盘。buffer是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速度而设计的。buffer将数据缓冲下来,解决速度慢和快的交接问题;速度快的需要通过缓冲区将数据一点一点传给速度慢的区域。例如:从内存中将数据往硬盘中写入,并不是直接写入,而是缓冲到一定大小之后刷入硬盘中。
2.cache:
A cache is something that has been “read” from the disk and stored for later use.翻译过来就是:cache就是从磁盘读取数据然后存起来方便以后使用。cache实现数据的重复使用,速度慢的设备需要通过缓存将经常要用到的数据缓存起来,缓存下来的数据可以提供高速的传输速度给速度快的设备。例如:将硬盘中的数据读取出来放在内存的缓存区中,这样以后再次访问同一个资源,速度会快很多。
3.buffer和cache的特点
共性:
都属于内存,数据都是临时的,一旦关机数据都会丢失。
差异:(先理解前两点,后两点有兴趣可以了解)
A.buffer是要写入数据;cache是已读取数据。
B.buffer数据丢失会影响数据完整性,源数据不受影响;cache数据丢失不会影响数据完整性,但会影响性能。
C.一般来说cache越大,性能越好,超过一定程度,导致命中率太低之后才会越大性能越低。buffer来说,空间越大性能影响不大,够用就行。cache过小,或者没有cache,不影响程序逻辑(高并发cache过小或者丢失导致系统忙死除外)。buffer过小有时候会影响程序逻辑,如导致网络丢包。
D.cache可以做到应用透明,编写应用的可以不用管是否有cache,可以在应用做好之后再上cache。当然开发者显式使用cache也行。buffer需要编写应用的人设计,是程序的一部分。
五.关于buffer和cache测试
buffer前者针对磁盘块的读写,cache针对文件inode的读写
sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。
/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。
cache释放:
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches
说明,释放前较好sync一下,防止丢数据。
因为LINUX的内核机制,一般情况下不需要特意去释放已经使用的cache。这些cache起来的内容可以增加文件以及的读写速度
如上图所示,当新写入一个test.txt时,buff/cache这条有83M增加到186,
执行sync和echo 3 > /proc/sys/vm/drop_caches后,减小到71M,主要是echo 3 > /proc/sys/vm/drop_caches起到的作用,说明cache释放了100多M。
六.linux系统如何查看内存
查看的内存的方式有很多种,萝卜青菜各有所爱,所有我介绍几种,可以根据个人喜欢选择。
从图形化到命令的顺序简单介绍。
1.gnome-system-monitor
显示CPU历史,内存和交换历史,以及网络历史。能实时查看内存的使用情况,但是没能看到buffer和cache的使用情况。
2.cat /proc/meminfo
查看动态更新的虚拟文件。内容比较全面,可以查看到许多关于内存的信息。
3.free
快速查看内存的方法,也是经常使用的命令。-h 更人性化的显示内存的单位 -m 以M的形式显示
4.top
top命令提供了实时的运行中的程序的资源使用统计。可以根据内存的使用和大小来进行排序。
5.sar
Linux统计/监控工具sar详细介绍:要判断一个系统瓶颈问题,有时需要几个 sar 命令选项结合起来使用,例如:怀疑CPU存在瓶颈,可用 sar -u 和 sar -q deng 等来查看 怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看 怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看