一项目基于linux开发,包含一个服务器状态监视的功能,一个兄弟完成该功能之后显示内存占用率一直保存在94%以上,虽然测试机只有512M内存,但也不至于空闲内存如此之少,内存使用率如此之高呀,测试人员在提出这个问题之后,那兄弟还搪塞测试人员:linux就这样,内存使用方式和windows不同。
分析了一下这个系统的代码,他从/proc/meminfo中直接读取了MemFree对应的值,直接导致空闲内存不对,内存使用率当然也不对,在Linux下正确获取空闲内存的方法应当如下:
1、读取/proc/meminfo文件,结果如下:
MemTotal: 515880 kB
MemFree: 12748 kB
Buffers: 20768 kB
Cached: 190328 kB
SwapCached: 91920 kB
Active: 349272 kB
Inactive: 119392 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 515880 kB
LowFree: 12748 kB
SwapTotal: 891568 kB
SwapFree: 646656 kB
Dirty: 208 kB
Writeback: 0 kB
AnonPages: 246588 kB
Mapped: 62140 kB
Slab: 25504 kB
SReclaimable: 12256 kB
SUnreclaim: 13248 kB
PageTables: 2592 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 1149508 kB
Committed_AS: 935784 kB
VmallocTotal: 507896 kB
VmallocUsed: 3576 kB
VmallocChunk: 504176 kB
2、MemTotal值作为总内存
3、空闲内存计算方式:如果Cached值大于MemTotal值则空闲内存为MemFree值,否则空闲内存为MemFree值+Buffers值+Cached值
4、内存使用率为:空闲内存/总内存*100%。