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