free
命令用于列出Linux中缓存、物理内存以及虚拟内存的使用情况,是Linux监控中比较常用的命令之一。
命令格式及选项
命令格式
free <选项> |
命令常用选项
-b
以Byte
为单位列出使用情况
-k
以KB
为单位列出使用情况
-m
以MB
为单位列出使用情况
-g
以GB
为单位列出使用情况
-h
以合适的单位列出使用情况
-t
显示每一列的总和
-s <num>
每num
秒刷新一次使用情况
-c <num>
刷新num
次使用情况,常与-s <num>
搭配使用
-o
不显示缓冲区调节列(Ubuntu 20.04 LTS不可用)
-V
显示该程序的版本信息(Ubuntu 20.04 LTS不可用)
使用实例
free |
部分参数说明
共享(shared)
一般是临时文件系统使用的内存
缓冲/缓存(buff/cache)
内核缓冲区以及页面缓存和Slab分配机制使用的内存
可用(available)
预计可被新启动的应用程序使用的内存(排除交换空间,但包括页面缓存在内,并且 不是所有的可回收的Slab内存都可真正被回收,因为可能有被占用的部分)
附注
交换空间(Swap Space)
交换空间是磁盘上的一块区域,既可以是一个分区,也可以是一个文件。当物理内存使用紧张时,Linux会把内存中不常用的数据保存到交换空间,以空出更多的物理内存供其他进程使用;当系统需要访问已经存储到交换空间中的数据时,则将交换空间中相应的数据加载到内存。适当使用交换空间不会对系统运行造成负面影响,但使用过多会导致系统的读写性能有较为明显的下降(因为频繁地对磁盘读写,而磁盘的读写速度远低于内存)。
页面缓存
把进程读取过的数据尽量留在内存中,尽量把对磁盘的访问转变为对内存的访问(当有进程需要读取该数据时,首先检查该数据是否还存在于页面缓存(即内存),如果是,则直接从内存读取数据;如果不是,再从磁盘读取数据),从而减少对磁盘的读取。
备注
Linux中内存都以“页”为单位进行管理,通常大小为4KB。
缓冲区
当磁盘中的数据被调入内存但未被进程使用时,其被存储在缓冲区中,等待被进程调用。
Slab分配机制
如果一个进程需要频繁地申请和释放内存,那么通过Slab分配机制它可以预先申请一部分的内存以供备用,当该进程需要使用内存时,则直接对该部分内存进行访问读写,而不需要再由操作系统分配内存,从而间接提高该进程读写内存的速度(因为省去了进程申请内存及操作系统为该进程分配内存的时间)。该机制还可有助于解决内存碎片化的问题,因为有些进程对内存的申请和释放非常频繁,而这些进程实际每个只使用不多于一个页面(4KB)的内存空间,但每个进程却都需要向操作系统申请一个页面,从而导致内存利用率的下降及带来碎片化问题,因此需要Slab分配机制,把若干个进程使用的内存空间分配于同一页面内,这样就不需要为每一个进程都分配页面,从而节省了内存空间,减少内存的碎片化。
备注
free
命令列出的信息是从/proc/meminfo
文件中获取的,可使用cat
命令查看该文件。
cat / /meminfo |
本文整理自
因为涉及到比较多Linux内核方面的知识,而我又是个初(菜)学(鸡)者 (つд⊂) ,因此本文可能存在或多或少的错误 (◞‸◟) ,请大佬多多指教,非常感谢 (≧∀≦)ゞ 。