Linux 内存使用率
文章参考:
例如当前主机内存信息如下:
1 [zhang@test ~]$ cat /proc/meminfo 2 MemTotal: 49294716 kB 3 MemFree: 1179308 kB 4 MemAvailable: 26672136 kB 5 Buffers: 606420 kB 6 Cached: 14511968 kB 7 SwapCached: 0 kB 8 Active: 21935144 kB 9 Inactive: 11190500 kB 10 Active(anon): 18008032 kB 11 Inactive(anon): 324 kB 12 Active(file): 3927112 kB 13 Inactive(file): 11190176 kB 14 Unevictable: 0 kB 15 Mlocked: 0 kB 16 SwapTotal: 0 kB 17 SwapFree: 0 kB 18 Dirty: 6544 kB 19 Writeback: 0 kB 20 AnonPages: 18007324 kB 21 Mapped: 119976 kB 22 Shmem: 1096 kB 23 Slab: 14501480 kB 24 SReclaimable: 10840908 kB 25 SUnreclaim: 3660572 kB 26 KernelStack: 17184 kB 27 PageTables: 48212 kB 28 NFS_Unstable: 0 kB 29 Bounce: 0 kB 30 WritebackTmp: 0 kB 31 CommitLimit: 24647356 kB 32 Committed_AS: 21739288 kB 33 VmallocTotal: 34359738367 kB 34 VmallocUsed: 117064 kB 35 VmallocChunk: 34359585408 kB 36 HardwareCorrupted: 0 kB 37 AnonHugePages: 5376000 kB 38 HugePages_Total: 0 39 HugePages_Free: 0 40 HugePages_Rsvd: 0 41 HugePages_Surp: 0 42 Hugepagesize: 2048 kB 43 DirectMap4k: 305140 kB 44 DirectMap2M: 50026496 kB
内存使用率计算公式:
1 UsedMem=MemTotal-(MemFree+Buffers+Cached+SReclaimable) 2 内存使用率=UsedMem/MemTotal*100% 3 4 当前主机内存使用率: 5 49294716-(1179308+606420+14511968+10840908)=22156112 6 22156112/49294716*100%=44.946%
PS:什么是SReclaimable?在linux内核中会有许多小对象,这些对象构造销毁十分频繁,比如i-node,dentry。那么这些对象如果每次构建的时候就向内存要一个页,而其实际大小可能只有几个字节,这样就非常浪费,为了解决这个问题就引入了一种新的机制来处理在同一页框中如何分配小存储器区,这个机制可以减少申请和释放内存带来的消耗,这些小存储器区的内存称为Slab。meminfo文件中标识了Slab的大小,而SReclaimable是指可收回Slab的大小。
1 Slab=SReclaimable+SUnreclaim