`

说说free命令

 
阅读更多

free是个常用命令,几乎每个接触、使用linux的用户都会用到它。但往往对它的统计输出会有一些困惑,这一方面和Linux内存管理机制有关,另一方面Linux在内存统计上也确实有些不足和问题。

关键在于两个字段,buffers和cached。

你经常会发现Linux系统用了一段时间后,内存所剩无几,free命令,一看,内存全跑到 buffers和cached里面了;这个现象是正常的。访问过的磁盘文件的元数据及内容,内核都会缓存起来。这些缓存就是磁盘缓存。

Linux磁盘缓存设计特点(设计理念):
除了系统运行必须的一小部分保留外,只要有剩余内存,只要需要,就会用给磁盘缓存。(没有一个参数可以让你限定缓存的上限。2.6内核之前有一个限定参数,后来给取消了)

所以会经常看到内存所剩无几的现象,这是缓存机制导致的,对应用是透明,在有内存需要时,这些内存会释放。这个过程对应用是透明的,应用可以认为系统的可用内存包括buffers和cached。


这种设计,在大多数服务器应用场景下都有比较好的性能表现。可以说是比较可取的。

设计本身没有问题,但free命令显示的buffers和cached并不能和磁盘缓存完全对应,这是实现细节上的不足和问题。


1. buffers和cached包含了不属于磁盘缓存的内容。
由于buffers和cached实际上就是内核为所有文件映射分配的物理页的总和(page cache)。
但内核中的“文件概念”是广泛的,不仅包含了真正位于磁盘上的文件,还包含了为特殊需要创建的虚拟文件,比如:

进程间的共享内存(通过shmget API创建的内存),内核建立一个虚拟的文件和共享内存关联起来。(通过pmap命令你可以看到进程拥有的共享内存地址空间的映射字段是/SYSVXXXX字样,不是匿名的)。

非常的不幸,这些虚拟文件映射关联的page,也被算入了free命令显示的cached字段。但这部分内存没有缓存属性,在内存不足时不能按缓存的方式来回收。(使用echo 3 >/proc/sys/vm/drop_caches,无法释放掉这部分内存)

这个问题,会带来一些麻烦。比如,按照常规理解,某产品设计内存占用过高告警的条件是,空闲内存+buffers+cached小于内存总和的20% 。一般情况下没有问题,但如果产品使用了大量的共享内存,告警将失去作用。

2. buffers和cached遗漏了部分属于磁盘缓存的内容。
还是由于buffers和cached只是内核为所有文件映射分配的物理页的总和。在文件系统方面,还有一部分缓存是不和文件映射相关联的,比如内核分配的inode对象,在文件关闭时,并不会立即释放,具备缓存的属性。这部分不在基于文件映射的页面里,而是通过slab(内核内存池)分配的。

这个问题,也会带来一些麻烦,比如某产品的一个现网问题,系统物理内存用了80%,但free top命令显示,用户进程没有占用、cached buffer也没有占用,于是担心是不是内核层内存泄露了,担心会有宕机风险。
经过分析,其实就是之前做了类似"find /“ 这样的操作,导致内核分配了太多的inode对象,并且缓存起来了。但站在用户层来看,会比较困惑和担心。

通过echo 3 >/proc/sys/vm/drop_caches可以释放这部分内存,这从侧面也证明了这部分确实属于缓存的范畴。

在最新的SUSE11 SP1系统上,free命令已经把这部分内存包含到了cached字段。

分享到:
评论

相关推荐

    free命令详解

    free命令详解,对于想了解free命令的人,一看就清楚了

    Linux上的free命令详解

    解释一下Linux上free命令的输出。  下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(Free Output)。例如: FO[2][1] = 24677460 FO[3][2] = 10321516 1 2 ...

    Linux系统命令top,ps,kill,free,vmstat等命令的源码

    Linux系统命令源码包,包含Top,Free,ps,kill等命令

    检测Linux内存使用情况的free命令的10个例子

    Linux是有名的开源操作系统之一,它拥有着极其巨大的命令集。...  free命令用于检测物理内存和交换内存已使用量和可用量(默认单位为KB)。下面演示命令的使用情况。  # free  total used free 

    嵌入式Linux内存管理之free命令

    作为一名linux系统管理员,监控内存的使用状态是非常重要的,监控内存最常使用的命令有free、top等,下面是某个系统free的输出

    yiyulianzhou#PHP-NOTES#free命令1

    free命令free命令是用来查看内存占用情况, -m表示以M为单位显示, -h表示以方便阅读的方式显示参数说明total 内存总数used 已经使用的内存数f

    linux free命令详解

    本篇文章主要介绍了linux free命令详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    freeradius连接mysql数据库+linux常用60个命令

    freeradius2.1.8 连接mysql5.1安装配置过程

    FreeRDP的安装文档

    FreeRDP可以使用xfreerdp命令连接到远程桌面,例如: xfreerdp -u [username] -p [password] [IPADDRESS] 如果启用多媒体重定向功能,可以使用以下命令: xfreerdp -u [username] -p [password] --plugin drdynvc...

    bugfree bugfree bugfree bugfree bugfree

    bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree bugfree

    freeRadius安装配置说明书 完全文档

    1.编译安装:使用tarball安装FreeRadius,执行configure、make和make install命令 2.配置安装:编辑radiusd.conf文件,配置FreeRadius服务器的基本参数 第四章_FreeRadius配置 FreeRadius配置主要包括以下几个方面...

    ubuntu rdp连接windows系统 freerdp

    1. 快捷安装:使用 `apt-get` 命令安装 FreeRDP:`apt-get install freerdp-x11` 2. 源码安装:首先下载 FreeRDP 的源代码,然后编译安装。 ``` git clone https://github.com/FreeRDP/FreeRDP.git cd FreeRDP apt-...

    FreeRadius客户端和服务器配置

    在安装过程中,我们需要使用 `./configure`、`make` 和 `make install` 命令来编译和安装 FreeRadius。 1. 安装 FreeRadius 客户端:下载 FreeRadius 客户端源代码,解压并编译安装。 2. 安装 FreeRadius 服务器:...

    Linux free命令用法详解

    Linux free命令 Linux free命令用于显示内存状态。 free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。 语法free [-bkmotV][-s ] 参数说明: -b 以Byte...

    Linux的free命令来显示系统中空闲和已使用的内存.docx

    Linux的free命令来显示系统中空闲和已使用的内存.docx

    查看Linux下系统资源占用常用命令.docx

    本文将介绍三种常用的命令:top命令、free命令和uptime命令。 1. top命令 top命令是一个功能强大的监控系统工具,用于显示执行中的程序进程。它可以显示当前系统的各种信息,包括进程列表、CPU使用情况、内存使用...

    Linux下安装FreeRDP连接Windows远程桌面的好软件软件.pdf

    在安装FreeRDP后,可以使用xfreerdp命令连接Windows远程桌面,例如xfreerdp 192.168.1.101 -u administrator -p 123命令可以连接到192.168.1.101的Windows远程桌面,使用administrator账户和123密码登录。FreeRDP还...

    h3c freeradius comware7 教程

    其次,需要配置网络在 internetwork 中,并使用 ping 命令检查主机之间和网络设备之间的通信是否正常。 二、添加用户到本地数据库 在本地数据库中添加一个用户,用户名为“admin”,密码为“hello”。这个用户将...

    free命令 显示系统内存情况

    free 命令能够显示系统中物理上的空闲和已用内存,还有交换内存,同时,也能显示被内核使用的缓冲和缓存。这些信息是通过解析文件 /proc/meminfo 而收集到的。 不带任何选项运行 free 命令会显示系统内存,包括空闲...

    FreeCAD中文教程-翻译版本

    FreeCAD中文教程-翻译版本 FreeCAD是一个免费的开源参数化3D建模应用程序,主要用于设计现实生活中的对象。参数化建模描述了某种类型的建模,您设计的3D对象的形状由参数控制。例如,砖的形状可能由三个参数控制:...

Global site tag (gtag.js) - Google Analytics