free命令

#free信息是通过解析文件 /proc/meminfo 而收集到的
[root@SqlRun alertscripts]# cat /proc/meminfo && free -t
MemTotal: 8012168 kB #所有可用RAM大小 (即物理内存减去一些预留位和内核的二进制代码大小)
MemFree: 231468 kB #表示系统尚未使用的内存。(MemTotal-MemFree)就是已被用掉的内存
MemAvailable: 3673768 kB #3.14内核增加的功能,Memavailable包括了MemFree和reclaimeable memory
Buffers: 282964 kB #用来给文件做缓冲大小
Cached: 3071308 kB #被高速缓冲存储器(cache memory)用的内存的大小(等于 diskcache minus SwapCache )
SwapCached: 0 kB #被高速缓冲存储器(cache memory)用的交换空间的大小已经 被交换出来的内存,但仍然被存放在swapfile中。用来在需要的时候很快的被替换而不需要再次打开I/O端口。
Active: 4963124 kB #在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用
Inactive: 2274352 kB #在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径
Active(anon): 2815844 kB
Inactive(anon): 1118220 kB
Active(file): 2147280 kB
Inactive(file): 1156132 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 8388604 kB #交换空间的总大小
SwapFree: 8388604 kB #未被使用交换空间的大小
Dirty: 104 kB #等待被写回到磁盘的内存大小
Writeback: 0 kB #正在被写回到磁盘的内存大小
AnonPages: 3883260 kB #未映射页的内存大小
Mapped: 75152 kB #设备和文件等映射的大小
Shmem: 50860 kB
Slab: 419856 kB #
SReclaimable: 392292 kB #可收回Slab的大小
SUnreclaim: 27564 kB #不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
KernelStack: 5080 kB #
PageTables: 35020 kB #管理内存分页页面的索引表的大小
NFS_Unstable: 0 kB #不稳定页表的大小
Bounce: 0 kB #
WritebackTmp: 0 kB #
CommitLimit: 12394688 kB #
Committed_AS: 6406380 kB #
VmallocTotal: 34359738367 kB #可以vmalloc虚拟内存大小
VmallocUsed: 24440 kB #已经被使用的虚拟内存大小
VmallocChunk: 34359711995 kB
HardwareCorrupted: 0 kB
AnonHugePages: 3024896 kB
HugePages_Total: 0 #大页面数目
HugePages_Free: 0 #空闲大页面数目
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB #大页面一页大小
DirectMap4k: 77696 kB
DirectMap2M: 4116480 kB
DirectMap1G: 6291456 kB
total used free shared buffers cached
Mem: 8012168 7780888 231280 50860 282964 3020448
-/+ buffers/cache: 4477476 3534692
Swap: 8388604 0 8388604
Total: 16400772 7780888 8619884
MemTotal
系统从加电开始到引导完成,firmware/BIOS要保留一些内存,kernel本身要占用一些内存,最后剩下可供kernel支配的内存就是MemTotal。这个值在系统运行期间一般是固定不变的。
MemAvailable
有些应用程序会根据系统的可用内存大小自动调整内存申请的多少,所以需要一个记录当前可用内存数量的统计值,MemFree并不适用,因为MemFree不能代表全部可用的内存,系统中有些内存虽然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以这部分可回收的内存加上MemFree才是系统可用的内存,即MemAvailable。/proc/meminfo中的MemAvailable是内核使用特定的算法估算出来的,要注意这是一个估计值,并不精确。
第一行:
全部:全部已安装内存(/proc/meminfo 中的 MemTotal 项)
已用:已用内存(全部计算 - 空闲+缓冲+缓存)
空闲:未使用内存(/proc/meminfo 中的 MemFree 项)
共用:主要被 tmpfs 使用的内存(/proc/meminfo 中的 Shmem 项)主要被 tmpfs(/proc/meminfo 中的 Shmem 项)使用
缓冲:被内核缓冲使用的内存(/proc/meminfo 中的 Buffers 项)
缓存:被页面缓存和 slab 使用的内存(/proc/meminfo 中的 Cached 和 SReclaimable 项)
total=MemTotal
used=MemTotal-MemFree+Buffers+Shmem
free=MemFree
shared=Shmem
buffers=Buffers
cached=Cached+SSReclaimable
第二行:表明已用和空闲的缓冲/缓存
used=
free=
used+free=MemTotal
第三行:表明总交换内存(/proc/meminfo 中的 SwapTotal 项)、空闲内存(/proc/meminfo 中的 SwapFree 项)和已用交换内存。
free -m/g/h #单位输出 free -t free -s 1 #1秒输出一次 free -c 5 #输出5次后退出
http://linuxperf.com/?p=102
https://blog.csdn.net/zdy0_2004/article/details/49806133
https://blog.csdn.net/jus3ve/article/details/79285750
https://www.centos.org/docs/5/html/5.1/Deployment_Guide/s2-proc-meminfo.html