Linux内存平均占用率

最近有个项目需要对内存平均占用率进行打点,Linux下内存相关信息可以执行从/proc/meminfo文件中获取,如下:

flycatorg@flycatorg:~$ cat /proc/meminfo
MemTotal:         509448 kB
MemFree:           23816 kB
Buffers:          172636 kB
Cached:           151636 kB
SwapCached:            0 kB
Active:           123484 kB
Inactive:         335476 kB
Active(anon):      57340 kB
Inactive(anon):    82664 kB
Active(file):      66144 kB
Inactive(file):   252812 kB
Unevictable:           8 kB
Mlocked:               8 kB
HighTotal:             0 kB
HighFree:              0 kB
LowTotal:         509448 kB
LowFree:           23816 kB
SwapTotal:        409616 kB
SwapFree:         409616 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        134696 kB
Mapped:            55304 kB
Slab:              16508 kB
SReclaimable:      10076 kB
SUnreclaim:         6432 kB
PageTables:         2220 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      664340 kB
Committed_AS:     423668 kB
VmallocTotal:     503864 kB
VmallocUsed:       19020 kB
VmallocChunk:     479952 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       4096 kB
DirectMap4k:       12224 kB
DirectMap4M:      512000 kB

flycatorg@flycatorg:~$

 

计算内存占用率,需要使用MemTotalMemFreeBuffersCached四项指标。

内存平均占用率 = 100 * (1 - 空闲内存/总内存),总内存就是MemTotal,主要是空闲内存的计算方法,最常见的错误认识MemFree就是空闲内存。

查阅了网上的各种说法,大家普遍认可的空闲内存计算方法为:若Cached大于MemTotal,空闲内存为MemFree;否则空闲内存为MemFree+Buffers+Cached

其实关于这个,我们通过free命令可以也可以得出结论:

 flycatorg@flycatorg:~$ free -k
             total       used       free     shared    buffers     cached
Mem:        509448     485660      23788          0     172636     151636
-/+ buffers/cache:     161388     348060
Swap:       409616          0     409616
flycatorg@flycatorg:~$

第一行:内存的相关指标,其中total = used + free

第二行:内存实际使用情况,其中free = 第一行的 (free + buffers + cached),因为分配了的buffers和cahce,不一定都被在使用,还是可以被回收的。

 

至于Cached大于MemTotal的场景,目前还没有彻底搞清楚,大概意思是:任何块设备都可以做Cache,当频繁访问某一个大文件时,Cahced就会很大,有时候会是好几个G,此时Cahced占用的应该不是内存。

——这个还是等我彻底搞清楚了再写吧。

 

posted on 2013-09-02 22:57  flycatorg  阅读(540)  评论(0编辑  收藏  举报

导航