文章参考:
例如当前主机内存信息如下:
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