当前位置: 首页 > Linux

Linux的free命令

时间:2023-04-06 01:42:30 Linux

free命令可以显示Linux系统中空闲和使用的物理内存和交换内存,以及内核使用的缓冲区。在Linux系统监控工具中,free命令是使用频率最高的命令之一。命令格式free[参数]命令功能free命令显示系统使用和释放的内存,包括物理内存、交互区域内存(swap)和内核缓冲内存。共享内存将被忽略。命令参数-b 以Byte为单位显示内存使用情况。-k 以KB为单位显示内存使用情况。-m 以MB为单位显示内存使用情况。-g以GB为单位显示内存使用情况。-o 不显示缓冲区调整列。-s<间隔秒数> 持续观察内存使用情况。-t 显示内存总和列。-V 显示版本信息。ShowMemoryUsageOutputIntroductionMem行(第二行)是内存使用情况。Swap行(第三行)是交换空间的使用情况。总计列显示系统的总可用物理内存和交换空间。使用的列显示已使用的物理内存和交换空间。空闲列显示有多少物理内存和交换空间仍可供使用。共享列显示共享的物理内存大小。buff/cache列显示缓冲区和缓存使用的物理内存大小。可用列显示有多少物理内存仍然可供应用程序使用。Buffers和cached都是缓存。两者有什么区别?先问一个问题:buffer和cache应该是两种内存,但是free命令为什么要把它们放在一起呢?要回答这个问题,我们需要做一些准备工作。我们先搞清楚buffer和cache是??什么意思。为了提高磁盘访问效率,Linux做了一些精心的设计。除了缓存dentry(在VFS中用于加速文件路径名到inode的转换)之外,它还采用了两种主要的Cache方式:BufferCache和PageCache。前者用于磁盘块的读写,后者用于文件inode的读写。这些Cache有效地缩短了I/O系统调用(如read、write、getdents)的时间。Buffer是指操作系统中的buffercache,中文一般译为“缓冲区”。要理解缓冲区,必须弄清另外两个概念:“扇区”和“块”。扇区是设备的最小寻址单元,也称为“硬扇区”或“设备块”。块是操作系统中文件系统的最小寻址单元,也称为“文件块”或“I/O块”。每个块包含一个或多个扇区,但不能大于一页,因此一页可以容纳内存中的一个或多个块。当一个块被带入内存时,它被存储在一个缓冲区中。每个buffer对应一个block,相当于磁盘块在内存中的表示:注意buffercache只有块的概念,没有文件的概念。它只是将磁盘上的块直接移动到内存中,而不关心块。文件存储的是什么格式。Cache是??指操作系统中的页面缓存,中文一般翻译为“页面缓存”。页缓存是内核实现的磁盘缓存。主要用于减少对磁盘的I/O操作。具体的,通过将磁盘中的数据缓存到物理内存中,将访问磁盘变为访问物理内存。页面缓存缓存内存页面。缓存中的页面来自于普通文件、块设备文件(这里指的是buffercache)和内存映射文件的读写。pagecache可以这样理解普通文件的缓存:当内核要读取一个文件(比如/etc/hosts)时,会先检查这个文件的数据是否已经在pagecache中。如果是,则放弃访问磁盘,直接从内存中读取。此行为称为缓存命中。如果数据不在缓存中,则为缓存未命中,内核将调度块I/O操作从磁盘读取数据。然后内核将读取的数据放入页面缓存中。该缓存的目标是文件系统识别的文件(例如/etc/hosts)。pagecache到块设备文件的缓存就是我们前面介绍的buffercahce。因为独立的磁盘块也是通过buffer存储在pagecache中的(buffer最终是由pagecache承载的)。buffer只是一个概念上比较特殊的pagecache,那free命令为什么不直接叫cache而是叫buff/cache呢?这是因为缓冲区和页面缓存实现本身并不统一。它们在linux内核2.4中被统一。早期的内核有两个独立的磁盘缓存:页面缓存和缓冲区缓存。前者缓存页面,后者缓存缓冲区。当您了解这些故事时,输出中的列名称可能不再重要。free和available在free命令的输出中,有一个free列和一个available列。两者有什么区别?free是尚未使用的实际物理内存量。至于available,就比较有意思了,它是从应用程序的角度来看的可用内存量。Linux内核为了提高磁盘操作的性能,会消耗一部分内存来缓存磁盘数据,也就是我们介绍的buffer和cache。所以对于内核来说,buffer和cache都属于已经使用过的内存。当应用程序需要内存时,如果没有足够的空闲内存可用,内核会从缓冲区和高速缓存中回收内存以满足应用程序的请求。所以从应用的角度来说,available=free+buffer+cache。请注意,这只是一种理想的计算方法,实际数据往往存在较大误差。交换空间(swapspace)交换空间是磁盘上的一块区域,可以是一个分区,也可以是一个文件。所以具体实现可以是swap分区,也可以是swap文件。当系统的物理内存紧张时,Linux会把内存中不常访问的数据保存到swap中,让系统有更多的物理内存来服务各个进程,当系统需要访问swap上存储的内容时,它将swap上的数据加载到内存中,也就是常说的换出和换入。swap空间可以在一定程度上缓解内存不足的情况,但是需要读写磁盘数据,所以性能不是很高。现在的机器一般都不缺内存。如果系统还是默认使用swap,会不会拖累系统的性能呢?理论上是的,但实际上不太可能。并且内核提供了一个参数swappiness,用来配置将内存中不常用的数据移动到swap的紧急程度。这个参数的取值范围是0到100。0告诉内核尽量不要把内存数据移到swap,也就是只有在绝对必要的时候才这样做,100告诉内核只要有可能,尝试移动内存数据将不常访问的数据移动到交换区。在ubuntu系统中,swappiness的默认值是60,如果我们觉得内存够用,可以在/etc/sysctl.conf文件中设置swappiness:>vm.swappiness=10以sum的形式显示内存使用信息定时查询内存使用信息原文链接:https://rumenz.com/rumenbiji/...WeChat公众号:GettingStarted