Linux下free命令详解系列一

Linux系统监控的工具中,free命令是最为常用的命令之一。free命令用于显示Linux系统内存的使用情况,包括物理内存(Mem)、交换内存(swap)和内核缓冲区内存(buffer/cache)。针对不同类型不同版本操作系统,free命令所展示的内存使用情况有所差异,我们这里以centos6.5centos7.2系统为例对命令的输出内容展开说明。

1、centos7.2下free 命令现实内存使用情况

在这里插入图片描述

free -m 其中-m的是用MB来显示输出的内容

Mem: 内存的使用信息
Swap: 交换空间的使用信息

第一行说明:

total : 系统总的物理内存大小

used: 系统已使用物理内存大小

free: 系统还剩余的物理内存大小

shared: 被共享使用的物理内存大小

buff/cache: buffer/cache使用的物理内存大小

buffers Memory used by kernel buffers (Buffers in /proc/meminfo)

cached Memory used by the page cache and slabs (Cached and SReclaimable in /proc/meminfo)

available 从应用程序角度来看,还可以被 应用程序 使用的物理内存大小

计算方式:

total = used + free + buff/cache
buff/cache = buffers + cache
available = free + buff/cache - 不可释放部分

对于buffer和cache到底是什么,二者之间有什么区别?底层实现原理到底是什么?什么时候该用buffer?什么时候该用cache?我相信很多人与我一样都是一头雾水,没有完全搞明白。

剑桥大学的计算机科学家大卫·惠勒 (David Wheeler)曾经说过一句很有哲理的话:

“Any problem in computer science can be solved by anther layer of indirection.”

翻译过来就是“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决” 。
在这里插入图片描述

大道至简,这句话真的是无与伦比的精辟,一句话从顶层设计上概括了整个计算机体系结构无论是软件系统还是硬件系统的分层结构思想。个人认为buffer和cache也是基于上诉分层体系思想而实现的。从字面上看,buffer的含义是缓存,cache的含义是缓存。我们知道硬件由于制作工艺不同,不同硬件读写速率有差距是非常悬殊的。比如,一般来说,内存访问的速度是硬盘读写速度的10倍以上。

假设有两个需要通信的硬件设备A和B,A的读写速率为100M/S,B的读写速率为50M,那么A与B相互访问时会存在两种相似场景:

  • 一是A向B写入100M文件内容,由于A的读写速率是B的两倍,B每秒钟只能读取50M,剩下50M还需要1秒钟,A白白浪费了1秒钟;

  • 二A从B读取100M文件内容,B每秒钟只能写入50M,A读取剩下50M还需要1秒钟,因此也白白浪费了1秒钟。

那有什么办法让A设备向B设备读/写的时候可以不浪费时间在1秒钟中内完成呢?我们知道A白白浪费了1秒钟而不能去处理其他任务,根本原因是两个设备读写速率不一致产生的延迟等待。因此,聪明的小伙伴可能会想到刚才大神说得那句至理名言:

“Any problem in computer science can be solved by anther layer of indirection.”

没错,我们可以在A设备与B设备之间嫁接一个中间层(middle layer),让中间层能够抹平双方的读写速率差异。计算机系统不同硬件之间的读写协议不同,因此需要通过接口进行交互。在middle layer靠近A处提供接口IA,IA读写速率与A近乎相同;靠近B处提供接口IB,IB读写速率与B近乎相同,A与B读写文件必须通过中间层的IA和IB接口。
在这里插入图片描述

  • 对于第一种场景:A向B写入100M文件内容,A知道只要通过middle layer就可以向B写入文件,因此通过IA接口将100M文件内容写入到middle layer。A从自身角度来看,已经将文件完整发送给B了,然后就可以开心得去处理其他工作了。一般情况下middle layer不会马上将文件写入到B中,middle layer相当于充当了buffer缓冲区的作用。缓冲区的使用场景是读写速率高的设备流向读写速率低的设备区域。例如,CPU寄存器写数据到内存,内存写数据到磁盘。

  • 对于第二种场景:A从B读取100M文件内容,第一次读取的时候由于受B的速率所拖累,还是白白等待浪费了水岸。但是在第二次读取的时候,middle layer将提早读取B的文件内容并进行缓存,A要读取B文件内容时直接是从middle layer缓存区读取,middle layer相当于一个cache缓存区。这时另外的设备C、D、E等要读取B的文件内容,也可以直接从缓存区读取,这些操作简直不要太酸爽了。当然如果cache不同步,可以清理掉cache。
    在这里插入图片描述

Page cache实际上是针对文件系统的缓存,从磁盘读取的内容会写入到这里,因此应用程序读取时速度会非常快。比如grep等命令第一次查找时会慢很多,后面再重复执行就会快好多。

Buffer cache是针对磁盘块的缓存,缓冲的这一部分内存数据最终是要写入到磁盘中。缓冲的数据不是实时写入到磁盘的,防止数据丢失可以在计算机断电前多执行几次sync命令。

那么最后来看下如何清理Buffer/Cache。Buffer/Cache释放前最好sync一下,防止丢失数据,但是一般情况下没有必要手动释放内存。

  • Clear PageCache only

$sync; echo 1 > /proc/sys/vm/drop_caches

  • Clear dentries and inodes.

$sync; echo 2 > /proc/sys/vm/drop_caches

  • Clear PageCache, dentries and inodes.

$sync; echo 3 > /proc/sys/vm/drop_caches

2、centos6.5下free 命令现实内存使用情况

在这里插入图片描述
Mem: 内存的使用信息,从操作系统角度分析内存使用情况
-/+ buffers/cache:从应用程序角度分析内存使用情况

-buffers/cache:也就是used-buffers-cache,表示当前系统中实际被应用程序吃掉的内存;

+buffers/cache:也就是free+buffers+cache,表示当前系统中还可以挪用分配给应用程序的实际内存总数;

愿你也能走出你的信息茧房
代码之外的骚技能

个人博客:http://www.geek-make.com

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: free命令是一个用于显示系统内存使用情况的命令。它可以显示系统的物理内存、交换空间和内核缓冲区的使用情况。free命令的输出结果包括以下内容: 1. total:系统总内存大小。 2. used:已使用的内存大小。 3. free:空闲的内存大小。 4. shared:被共享的内存大小。 5. buffers:内核缓冲区占用的内存大小。 6. cached:缓存的内存大小。 7. -/+ buffers/cache:实际可用的内存大小。 其中,buffers和cached是内核缓存的一部分,它们可以被释放用于其他用途,因此在计算可用内存时需要将它们考虑在内。-/+ buffers/cache是实际可用内存的计算公式,即total-used+buffers+cached。 使用free命令可以帮助我们了解系统内存的使用情况,及时发现内存不足的问题,以便采取相应的措施。 ### 回答2: free命令是Linux操作系统下一款常用的系统资源检测工具,主要用于查看Linux系统的内存使用情况。free命令提供了几类信息,包括总的物理内存、已用的物理内存、剩余的物理内存、可以被缓存的内存、已用交换分区大小、可用交换分区大小等。 下面是free命令的详细参数解释: 1. -b :以字节单位显示内存使用情况。 2. -k :以kB为单位显示内存使用情况。 3. -m :以MB为单位显示内存使用情况。 4. -g :以GB为单位显示内存使用情况。 5. -t :输出总和行。 6. -s :表示每次命令执行后的时间间隔。 7. -c :表示显示的次数。 通过free命令,我们可以查看系统当前的内存使用情况,以便更好地掌握系统的运行状态。通过free命令的输出结果,我们可以得出几个结论: 1. 内存使用量总是会随着系统运行时间的增加而逐渐增加。 2. 剩余内存量会随着系统运行时间的增加而逐渐减少。 3. 缓存内存会随着系统运行时间的增加而逐渐增加。 总之,了解free命令的使用方法可以帮助我们更好地了解系统内存使用情况,以便及时调整和优化系统的内存使用策略。同时,我们也可以基于free命令的输出结果,采取一些措施来优化系统的性能,以更好地满足用户的需求。 ### 回答3: free命令是Linux系统中常用的系统监控工具之一,用于查看系统的内存使用情况。以下是free命令的详细解释: free命令的语法:free [options] options参数: -b, --bytes 显示以字节为单位的内存使用情况 -k, --kilo 显示以KB为单位的内存使用情况 -m, --mega 显示以MB为单位的内存使用情况 -g, --giga 显示以GB为单位的内存使用情况 -o, --old 使用旧版输出格式 -h, --human 显示以易读的格式输出 --si 显示以1000为基数的单位 --iec 显示以1024为基数的单位 -t, --total 显示总共的内存使用情况 其中,-b -k -m -g等参数用于表示内存使用的单位,-o -h等参数用于显示输出的格式。 free命令输出的结果包括: total:物理内存总量。 used:已经使用的内存量。 free:空闲的内存量。 shared:多进程共享的内存量。 buffers:文件缓冲区占用的内存量。 cached:一般缓存占用的内存量。 -/+ buffers/cache:已经使用内存与空闲内存的和。 Swap:虚拟内存总量。 其中,buffers和cached是指Linux系统对IO进行缓存所占用的内存,当有程序需要更多内存时,这部分缓存内存会自动释放。 使用free命令的主要目的是监控系统的内存使用情况,了解系统是否已经使用了过多内存,以及通过优化释放内存来提高系统性能。如果系统内存使用过多,可以考虑关闭一些不必要的服务或程序,或者优化程序,减少内存占用。同时,如果需要更大的内存容量,可以考虑升级硬件或者扩大内存容量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值