Linux下各种内存的使用率的算法
版本一:
先引用百度知道的提问:
free -m | sed -n '2p' | awk '{print "used mem is "$3"M,total mem is "$2"M,used percent is "$3/$2*100"%"}'
used mem is 2796M,total mem is 3829M,used percent is 73.0217%
以下图截图为准:
这种算法其实就是直接用Mem中的used除以total得到的百分比:
(2810 / 3829) *100= 73.4%
-----------------------------------------------------------华丽的分割-----------------------------------------------------------------------------------------------------
版本二:
ITPUB中的博客: linux系统查看内存使用率
这里有个51.1%,楼主算了半天没有明白这个是怎么得到的:
用 2029 / 3990 = 50.85%
3906 / 3990 = 97.89%
回头去看的时候发现他先不换算成M,直接用k做单位,即free(没有 -m)
51.1% = (2090108 / (1996388 + 2090108) ) * 100%
公式为:可用内存=free + buffer + cache
已用内存=used - buffer - cache
-----------------------------------------------------------华丽的分割-----------------------------------------------------------------------------------------------------
版本三:
Walk in Mindfields
===================================华丽的分隔符===========================================================
1,通过以上的整合,我们有几个公式如下:(换算成M的时候有四舍五入,所以以下的计算存在1以内的误差)
①系统可用内存:MemFree = MemTotal - MemUsed
1018 = 3829 - 2810
②系统已用内存:MemUsed = MemTotal - MemFree
2810 = 3829 - 1018
①物理可用内存:-/+Free = MemFree + MemBuffers + MemCache
2068 = 1018 + 171 + 879
②物理已用内存:-/+Used = MemTotal - MemFree - MemBuffers - MemCache
1760 = 3829 - 1018 - 171 - 879
2,有几种算法如下:
①计算系统已用内存的百分比:
free -m | sed -n '2p' | awk '{print "used mem is "$3"M,total mem is "$2"M,used percent is "$3/$2*100"%"}'
或者
(MemUsed / MemTotal)/MemTotal * 100%
②计算物理内存的使用
(-/+Used / MemTotal) * 100%
3,总结如下:
多数的linux系统在free命令后会发现free(剩余)的内存很少,而自己又没有开过多的程序或服务。
对于上述的情况,正确的解释是:
linux的内存管理机制与windows的有所不同。具体的机制我们无需知道,我们需要知道的是,linux的内存管理机制的思想包括(不敢说就是)内存利用率最大化。内核会把剩余的内存申请为cached,而cached不属于free范畴。当系统运行时间较久,会发现cached很大,对于有频繁文件读写操作的系统,这种现象会更加明显。