Linux必知必会-理解内存使用统计命令free

DSC07274

本文详细介绍了Linux系统中的free命令的使用方法以及关键参数的含义,这可能是你见过的关于free命令最详细的一篇文章了,绝对值得你收藏。

free命令显示了Linux系统中物理内存、交换分区的使用统计信息。

指标说明

使用free命令查看内存信息,最重要的是理解当前系统的可用内存并不是直接看 free 字段就可以看出来的,应该参考的是

可用内存 = free + buffers + cached

除去标题行之后,第一行为 物理内存使用统计

标题 说明
total 物理内存总量 total = used + free
used 已使用内存总量,包含应用使用量+buffer+cached
free 空闲内存总量
shared 共享内存总量
buffers 块设备所占用的缓存
cached 普通文件数据所占用的缓存
available 当前可用内存总量(可用于分配给应用的,不包含虚拟内存)

对于available字段,在内核3.14中,它会从/proc/meminfo中的MemAvailable读取,在内核2.6.27+的系统上采用模拟的方式获取,其它情况下直接与free的值相同。

第二行-/+ buffers/cache 中只有两列usedfree有值,它们是物理内存的调整值

标题 说明
used 已使用内存(used)减去buffer和cached之后的内存,也就是应用正在使用的内存总量
free 空闲内存加上buffer和cached之后的内存,也就是真正的可用内存总量

第三行为交换分区使用统计

标题 说明
total 交换分区内存总量
used 正在使用的交换分区内存
free 空闲交换分区内存

在上面这些指标中,我们需要注意的是在下面这些情况下,系统是正常的,不需要担心

  • 空闲内存free接近于0

  • 已使用内存used接近于total

  • 可用内存(free+buffers/cache)占total的 20% 以上

  • 交换分区内存 swap 没有发生改变

下面情况说明内存过低,需要注意!

  • 可用内存(free+buffers/cache)过低,接近于0的时候

  • 交换分区内存占用swap used增加或者有波动

  • dmesg | grep oom-killer显示有OutOfMemory-killer正在运行

常用参数

选项 说明
-b/k/m/g 以bytes/kilobytes/megabytes/gigabytes为单位显示结果
-h 以人类可读的方式输出统计结果
-t 使用该选项会多显示一行标题为Total的统计信息
-o 禁止显示第二行的缓冲区调整值
-s 每隔多少秒自动刷新结果
-c -s配合使用,控制刷新结果次数
-l 显示高低内存的统计详情
-a 显示可用内存
-V 显示版本号

版本不同,可能部分选项也不相同。

参考示例

# free -t -a -g

本文将会持续修正和更新,最新内容请参考我的 GITHUB 上的 程序猿成长计划 项目,欢迎 Star,更多精彩内容请 follow me

参考文献


半栈开发者

7.8k 声望
1.7k 粉丝
0 条评论
推荐阅读
Glacier Framework - 支持依赖注入的 Go 应用开发框架
其实这个项目在 4 年前就已经开始了,因为所有的功能都是基于日常工作中的需求来的,断断续续的补充和完善功能,之前都是在自己公司这边的各种 Go 项目和我开源的一些项目中使用。很早之前就想把它开源出来,但是...

mylxsw1阅读 3.7k

记一次使用gdb诊断gc问题全过程
上次解决了GC长耗时问题后,系统果然平稳了许多,这是之前的文章《GC耗时高,原因竟是服务流量小?》 然而,过了一段时间,我检查GC日志时,又发现了一个GC问题,如下: 从这个图中可以发现,我们GC有一些尖峰,...

扣钉日记2阅读 1.1k

封面图
使用kubeasz部署高可用kubernetes集群
本实验采用kubeasz作为kubernetes环境部署工具,它是一个基于二进制方式部署和利用ansible-playbook实现自动化来快速部署高可用kubernetes集群的工具,详细介绍请查看kubeasz官方。本实验用到的所有虚拟机默认软...

李朝阳4阅读 711

linux中用户登录加载配置文件的过程
shell的类型(站在用户登录登录的角度)登录式shell正常通过某终端登录su - USERNAMEsu -l USERNAME非登录式shellsu USERNAME图形终端下打开命令窗口自动执行的shell脚本用户登录时相关的bash配置文件全局配置文件/...

Dabric阅读 5.3k评论 3

在Linux上查看活跃线程数与连接数
现如今,有两种常见的软件资源几乎成了Java后端程序的标配,即线程池与连接池,但这些池化资源非常的重要,一旦不够用了,就会导致程序阻塞、性能低下,所以有时我们需要看看它们的使用情况,以判断这里是否是瓶颈。

扣钉日记3阅读 975

封面图
9个超有用的 Linux Touch 命令实例讲解
touch 命令用于创建空文件,也用于更改 Linux 系统中现有文件的时间戳。这里更改时间戳意味着更新文件和目录的访问和修改时间。命令语法touch {options} {file}语法选项1) 创建一个空文件touch 命令创建一个空文...

鸠摩智首席音效师1阅读 1.7k

C语言获取服务器mac地址
它的信息保存在结构体struct ifconf中,有可能不止一个。获取到的信息保存在ifc_buf中。第二个逻辑就是根据网卡的名字去获取mac地址,主要用下面的函数完成:

禹鼎侯阅读 3.3k

半栈开发者

7.8k 声望
1.7k 粉丝
宣传栏