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

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

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

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

因为free命令本身比较简单,所以本文的重点会置于怎样通过free命令了解系统当前的显存使用状况。

输出简介

下边先解释一下输出的内容:

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

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

linux系统内存查询命令_查询内存linux_linux查询内存使用命令

total列显示系统总的可用化学显存和交换空间大小。

used列显示早已被使用的数学显存和交换空间。

free列显示还有多少化学显存和交换空间可用使用。

shared列显示被共享使用的数学显存大小。

buff/cache列显示被buffer和cache使用的数学显存大小。

available列显示还可以被应用程序使用的数学显存大小。

我想只有在理解了一些基本概念以后,里面的输出能够帮助我们了解系统的显存状况。

buff/cache

先来提一个问题:buffer和cache应当是两种类型的显存,然而free命令为何会把它们置于一起呢?要回答这个问题须要我们做些打算工作。让我们先来厘清楚buffer与cache的含意。

buffer在操作系统手指buffercache,英文通常翻译为“缓冲区”。要理解缓冲区,必须明晰另外两个概念:“扇区”和“块”。磁道是设备的最小轮询单元linux开源软件,也叫“硬磁道”或“设备块”。块是操作系统中文件系统的最小轮询单元,也叫“文件块”或“I/O块”。每位块包含一个或多个磁道,但大小不能超过一个页面,所以一个页可以容纳一个或多个显存中的块。当一个块被调入显存时,它要储存在一个缓冲区中。每位缓冲区与一个块对应,它相当于是c盘块在显存中的表示(右图来自互联网):

注意,buffercache只有块的概念而没有文件的概念,它只是把c盘上的块直接搬进显存中而不关心块中到底储存的是哪些格式的文件。

cache在操作系统手指pagecache,英文通常翻译为“页高速缓存”。页高速缓存是内核实现的c盘缓存。它主要拿来降低对c盘的I/O操作。具体地讲,是通过把c盘中的数据缓存到化学显存中,把对c盘的访问变为对化学显存的访问。页高速缓存缓存的是显存页面。缓存中的页来自对普通文件、块设备文件(这个指的就是buffercache呀)和显存映射文件的读写。

页高速缓存对普通文件的缓存我们可以这样理解:当内核要读一个文件(例如/etc/hosts)时linux系统内存查询命令,它会先检测这个文件的数据是不是早已在页高速缓存中了。假如在,就舍弃访问c盘,直接从显存中读取。这个行为称为缓存命中。假如数据不在缓存中,就是未命中缓存,此时内核就要调度块I/O操作从c盘去读取数据。之后内核将读来的数据装入页高速缓存中。这些缓存的目标是文件系统可以辨识的文件(例如/etc/hosts)。

页高速缓存对块设备文件的缓存就是我们在后面介绍的buffercahce。由于独立的c盘块通过缓冲区也被存入了页高速缓存(缓冲区最终是由页高速缓存来承载的)。

到这儿我们应当厘清楚了:无论是缓冲区还是页高速缓存,它们的实现方法都是一样的。缓冲区只不过是一种概念上比较特殊的页高速缓存罢了。

这么为何free命令不直接称为cache而非要写成buff/cache?这是由于缓冲区和页高速缓存的实现并非天生就是统一的。在linux内核2.4中才将它们统一。更早的内核中有两个独立的c盘缓存:页高速缓存和缓冲区高速缓存。后者缓存页面,前者缓存缓冲区。当你晓得了这种故事以后,输出中列的名称可能早已不再重要了。

free与available

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

free是真正仍未被使用的化学显存数目。至于available就比较有意思了,它是从应用程序的角度见到的可用显存数目。Linux内核为了提高c盘操作的性能,会消耗一部份显存去缓存c盘数据,就是我们介绍的buffer和cache。所以对于内核来说,buffer和cache都属于早已被使用的显存。当应用程序须要显存时,假若没有足够的free显存可以用,内核都会从buffer和cache中回收显存来满足应用程序的恳求。所以从应用程序的角度来说,available=free+buffer+cache。请注意,这只是一个很理想的估算方法,实际中的数据常常有较大的偏差。

交换空间(swapspace)

swapspace是c盘上的一块区域,可以是一个分区,也可以是一个文件。所以具体的实现可以是swap分区也可以是swap文件。当系统数学显存吃紧时,Linux会将显存中不常访问的数据保存到swap上,这样系统就有更多的化学显存为各个进程服务,而当系统须要访问swap上储存的内容时,再将swap上的数据加载到显存中,这就是常说的换出和换入。交换空间可以在一定程度上减轻显存不足的情况linux系统内存查询命令,而且它须要读写c盘数据,所以性能不是很高。

查询内存linux_linux查询内存使用命令_linux系统内存查询命令

如今的机器通常都不太缺显存,假如系统默认还是使用了swap是不是会连累系统的性能?理论上是的,但实际上可能性并不是很大。而且内核提供了一个称作swappiness的参数,用于配置须要将显存中不常用的数据移到swap中去的急迫程度。这个参数的取值范围是0~100,0告诉内核尽可能的不要将显存数据移到swap中,也即只有在迫不得已的情况下才如此做,而100告诉内核只要有可能,尽量的将显存中不常访问的数据移到swap中。在ubuntu系统中,swappiness的默认值是60。假如我们感觉显存充足,可以在/etc/sysctl.conf文件中设置swappiness:

vm.swappiness=10

注释:这些属于永久更改。假如只是想临时改一下(上次登陆失效),则可以直接输入命令:sysctlvm.swappiness=10

假如系统的显存不足,则须要依照化学显存的大小来设置交换空间的大小。具体的策略网上有很丰富的资料linux数据恢复,这儿笔者不再赘言。

/proc/meminfo文件

虽然free命令中的信息都来自于/proc/meminfo文件。/proc/meminfo文件包含了更多更原始的信息,只是看上去不太直观:

cat /proc/meminfo

有兴趣的朋友可以直接查看这个文件。

总结

free命令是一个既简单又复杂的命令。简单是由于这个命令的参数少,输出结果清晰。说它复杂则是由于它背后是比较隐晦的操作系统中的概念,假如不清楚这种概念,虽然看了free命令的输出也get不到多少有价值的信息。

我们在学习或使用Linux中会发觉好多命令都很简单,这让我们常常忽略了对命令显示结果的了解,有时侯有些命令还是须要我们深入的了解其原理,这样就能帮助我们更好的解决问题,完成既定目标。

差别还很大,努力吧少年~

Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复