关键在于两个字段,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命令的人,一看就清楚了
解释一下Linux上free命令的输出。 下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(Free Output)。例如: FO[2][1] = 24677460 FO[3][2] = 10321516 1 2 ...
Linux系统命令源码包,包含Top,Free,ps,kill等命令
Linux是有名的开源操作系统之一,它拥有着极其巨大的命令集。... free命令用于检测物理内存和交换内存已使用量和可用量(默认单位为KB)。下面演示命令的使用情况。 # free total used free
作为一名linux系统管理员,监控内存的使用状态是非常重要的,监控内存最常使用的命令有free、top等,下面是某个系统free的输出
free命令free命令是用来查看内存占用情况, -m表示以M为单位显示, -h表示以方便阅读的方式显示参数说明total 内存总数used 已经使用的内存数f
本篇文章主要介绍了linux free命令详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
freeradius2.1.8 连接mysql5.1安装配置过程
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
1.编译安装:使用tarball安装FreeRadius,执行configure、make和make install命令 2.配置安装:编辑radiusd.conf文件,配置FreeRadius服务器的基本参数 第四章_FreeRadius配置 FreeRadius配置主要包括以下几个方面...
1. 快捷安装:使用 `apt-get` 命令安装 FreeRDP:`apt-get install freerdp-x11` 2. 源码安装:首先下载 FreeRDP 的源代码,然后编译安装。 ``` git clone https://github.com/FreeRDP/FreeRDP.git cd FreeRDP apt-...
在安装过程中,我们需要使用 `./configure`、`make` 和 `make install` 命令来编译和安装 FreeRadius。 1. 安装 FreeRadius 客户端:下载 FreeRadius 客户端源代码,解压并编译安装。 2. 安装 FreeRadius 服务器:...
Linux free命令 Linux free命令用于显示内存状态。 free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。 语法free [-bkmotV][-s ] 参数说明: -b 以Byte...
Linux的free命令来显示系统中空闲和已使用的内存.docx
本文将介绍三种常用的命令:top命令、free命令和uptime命令。 1. top命令 top命令是一个功能强大的监控系统工具,用于显示执行中的程序进程。它可以显示当前系统的各种信息,包括进程列表、CPU使用情况、内存使用...
在安装FreeRDP后,可以使用xfreerdp命令连接Windows远程桌面,例如xfreerdp 192.168.1.101 -u administrator -p 123命令可以连接到192.168.1.101的Windows远程桌面,使用administrator账户和123密码登录。FreeRDP还...
其次,需要配置网络在 internetwork 中,并使用 ping 命令检查主机之间和网络设备之间的通信是否正常。 二、添加用户到本地数据库 在本地数据库中添加一个用户,用户名为“admin”,密码为“hello”。这个用户将...
free 命令能够显示系统中物理上的空闲和已用内存,还有交换内存,同时,也能显示被内核使用的缓冲和缓存。这些信息是通过解析文件 /proc/meminfo 而收集到的。 不带任何选项运行 free 命令会显示系统内存,包括空闲...
FreeCAD中文教程-翻译版本 FreeCAD是一个免费的开源参数化3D建模应用程序,主要用于设计现实生活中的对象。参数化建模描述了某种类型的建模,您设计的3D对象的形状由参数控制。例如,砖的形状可能由三个参数控制:...