Linux编程:通过 free 命令查看Linux系统实际可用内存大小

一、free 命令

通过 free 命令查看系统的内存使用情况,内存大小单位为 KB,执行结果如下图所示:
free
通过 free -m 命令查看系统的内存使用情况,内存大小单位为 MB,执行结果如下图所示:
free -m
通过 free -g 命令查看系统的内存使用情况,内存大小单位为 GB,执行结果如下图所示:
在这里插入图片描述

二、实际可用内存大小计算

从上方的图片得知, free 命令执行完成后,会显示 MemSwap 两行数据,其中 Mem 表示物理内存的使用情况,Swap 表示 Swap 分区的使用情况。

什么是 Swap 分区?
Swap 分区是操作系统在硬盘上开辟的一块空间,当物理内存块被耗尽时,系统会将一些长时间没有使用的进程的内存转移到 Swap 分区;当物理内存被释放后,Swap 区的数据会随着进程的使用逐步回到物理内存中。

1、Mem 属性说明见下表:

属性 属性值 说明
total 8192MB 总物理内存大小
used 601MB 已使用物理内存大小
free 3998MB 未分配物理内存大小
shared 0MB 共享的物理内存大小
buff/cache 3591MB 为了提高系统的读写速度(包含磁盘快的读写,文件 inode 的读写等),操作系统将部分内存作为缓存使用,该数值为缓存占用的物理内存大小
available 3998MB 可用的物理内存大小,具体计算方法见:provide estimated available memory

2、Swap 属性说明见下表:

属性 属性值 说明
total 0MB Swap 分区的总大小
used 0MB 已使用的 Swap 分区大小
free 0MB 未使用的 Swap 分区大小

3、不考虑 Swap 分区
根据上表,在不考虑 Swap 分区的情况下,内存计算如下:
总内存大小:Mem.total = Mem.used + Mem.free + Mem.shared + Mem.buff/cache
理论上实际可用内存大小:Mem.actual = Mem.total - Mem.used - Mem.shared = Mem.free + Mem.buff/cache

4、考虑 Swap 分区
根据上表,在考虑 Swap 分区的情况下,内存计算如下:
总内存大小:Mem.total = Mem.used + Mem.free + Mem.shared + Mem.buff/cache
理论上实际可用内存大小:Mem.actual = Mem.total - Mem.used - Mem.shared + Swap.free = Mem.free + Mem.buff/cache + Swap.free

5、系统建议的可用大小 available
available 官方定义:

MemAvailable: An estimate of how much memory is available for starting new applications, without swapping. Calculated from MemFree, SReclaimable, the size of the file LRU lists, and the low watermarks in each zone. The estimate takes into account that the system needs some page cache to function well, and that not all reclaimable slab will be reclaimable, due to items being in use. The impact of those factors will vary from system to system.

available 翻译:

memavailable:它是一个估计值,在不考虑 Swap 分区的情况下,估算有多少内存可用于启动新的应用程序。根据 memfree、可回收的page cache、slab cache、LRU队列的大小以及每个区域中的低水位线进行计算。该估计考虑到系统需要一些 page cache 才能正常运行,而且由于某些程序正在使用,并非所有可回收的 slab 都可以回收。这些因素的影响因系统而异。

available 计算公式见下图:
在这里插入图片描述
公式概括为:
Mem.available = Mem.free + PageCache.size + SlabCache.size - WaterMark.low

属性 属性值 说明
PageCache.size 0MB 可以回收的 PageCache 大小,计算公式见上图
SlabCache.size 0MB 可以回收的 SlabCache 大小 ,计算公式见上图
WaterMark.low 0MB 支持系统使用的最低水位线,计算公式见上图

因此在不考虑 Swap 分区的情况下,建议通过 available 参数判定系统的实际可用内容。文章内容仅代表个人观点,如有不正之处,欢迎批评指正,谢谢大家。

参考资料

1.Linux Page Cache机制,Page Cache、Slab Cache
2.Linux Page Cache的工作原理
3.Linux内存管理 (25)内存sysfs节点解读
4.Linux free命令前后变化和available内存
5.linux free 命令下free/available区别
6.index : kernel/git/torvalds/linux.git

发布了179 篇原创文章 · 获赞 296 · 访问量 164万+

猜你喜欢

转载自blog.csdn.net/claram/article/details/102709781