博客
关于我
Linux命令之------free
阅读量:323 次
发布时间:2019-03-04

本文共 1557 字,大约阅读时间需要 5 分钟。

free 命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。

如果加上 -h 选项,输出的结果会友好很多:

有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数:

free -h -s 3

上面的命令每隔 3 秒输出一次内存的使用情况,直到你按下 ctrl + c。

 

输出简介:

Mem 行(第二行)是内存的使用情况。

Swap 行(第三行)是交换空间的使用情况。

total:内存总大小。

used:使用了多少内存。

free:除了buff/cache剩余了多少内存。

shared:共享内存。

buff/cache:缓冲、缓存区内存数。

available:真实剩余的可用内存数。

关系:total = used + free + buff/cache

关系:available 包含 free 和 buff/cache 剩余部分,则是真实剩余内存。

 

buff/cache

通过man free可以看到:

buff/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实现数据的重复使用,速度慢的设备需要通过缓存将经常要用到的数据缓存起来,缓存下来的数据可以提供高速的传输速度给速度快的设备。例如:将硬盘中的数据读取出来放在内存的缓存区中,这样以后再次访问同一个资源,速度会快很多。

 

free 字段与available字段

在 free 命令的输出中,有一个 free 列,同时还有一个 available 列。这二者到底有何区别?

free 是真正尚未被使用的物理内存数量。至于 available 就比较有意思了,它是从应用程序的角度看到的可用内存数量。Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available  = free + buffer + cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。

 

交换空间(swap space)

swap space 是磁盘上的一块区域,可以是一个分区,也可以是一个文件。所以具体的实现可以是 swap 分区也可以是 swap 文件。当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,这就是常说的换出和换入。交换空间可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高。

转载地址:http://rlfh.baihongyu.com/

你可能感兴趣的文章
服务器开发- Asp.Net Core中的websocket,并封装一个简单的中间件
查看>>
没花一分钱的我竟然收到的JetBrains IDEA官方免费赠送一年的Licence
查看>>
Redis 集合统计(HyperLogLog)
查看>>
Dynamics CRM实体系列之字段
查看>>
RE套路 - 关于pyinstaller打包文件的复原
查看>>
【wp】HWS计划2021硬件安全冬令营线上选拔赛
查看>>
Ef+T4模板实现代码快速生成器
查看>>
dll详解
查看>>
c++ static笔记
查看>>
C++中头文件相互包含与前置声明
查看>>
9.4 翻译系列:EF 6以及 EF Core中的NotMapped特性(EF 6 Code-First系列)
查看>>
JQuery选择器
查看>>
MVC中在一个视图中,怎么加载另外一个视图?
查看>>
SQL--空值处理
查看>>
SQL--局部变量
查看>>
SQL--存储过程
查看>>
MVC学习系列5--Layout布局页和RenderSection的使用
查看>>
MVC学习系列13--验证系列之Remote Validation
查看>>
使用SQLite做本地数据缓存的思考
查看>>
Spring容器管理Bean的生命周期
查看>>