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

Posted 志波同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux编程:通过 free 命令查看Linux系统实际可用内存大小相关的知识,希望对你有一定的参考价值。

一、free 命令

通过 free 命令查看系统的内存使用情况,内存大小单位为 KB,执行结果如下图所示:

通过 free -m 命令查看系统的内存使用情况,内存大小单位为 MB,执行结果如下图所示:

通过 free -g 命令查看系统的内存使用情况,内存大小单位为 GB,执行结果如下图所示:

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

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

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

1、Mem 属性说明见下表:

属性属性值说明
total8192MB总物理内存大小
used601MB已使用物理内存大小
free3998MB未分配物理内存大小
shared0MB共享的物理内存大小
buff/cache3591MB为了提高系统的读写速度(包含磁盘快的读写,文件 inode 的读写等),操作系统将部分内存作为缓存使用,该数值为缓存占用的物理内存大小
available3998MB可用的物理内存大小,具体计算方法见:provide estimated available memory

2、Swap 属性说明见下表:

属性属性值说明
total0MBSwap 分区的总大小
used0MB已使用的 Swap 分区大小
free0MB未使用的 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.size0MB可以回收的 PageCache 大小,计算公式见上图
SlabCache.size0MB可以回收的 SlabCache 大小 ,计算公式见上图
WaterMark.low0MB支持系统使用的最低水位线,计算公式见上图

因此在不考虑 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

以上是关于Linux编程:通过 free 命令查看Linux系统实际可用内存大小的主要内容,如果未能解决你的问题,请参考以下文章

linux基础命令-查看系统状态-free -m以及top命令详解

linux查看内存使用情况

linux free查看内存使用状况

Linux下内存查看命令

监控io性能free命令ps命令查看网络状态linux下抓包

Linux中内存查看命令free详解(转)