0%

free命令笔记

free命令用于列出Linux中缓存、物理内存以及虚拟内存的使用情况,是Linux监控中比较常用的命令之一。

命令格式及选项

命令格式

free <选项>

命令常用选项

-bByte为单位列出使用情况

-kKB为单位列出使用情况

-mMB为单位列出使用情况

-gGB为单位列出使用情况

-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 /proc/meminfo

本文整理自

6 个例子让初学者掌握 free 命令

linux free 命令

用户进程缓冲区和内核缓冲区

【Linux 内核】内存管理(三)slab分配器

因为涉及到比较多Linux内核方面的知识,而我又是个初(菜)学(鸡)者 (つд⊂) ,因此本文可能存在或多或少的错误 (◞‸◟) ,请大佬多多指教,非常感谢 (≧∀≦)ゞ 。