linux内存使用率计算方法

1、一般情况下大家查看系统内存使用情况都会用到free -m 命令来查看(如图)

但是多数情况大家对如何得出准确的内存使用率有些迷惑,因为多数的linux系统在free命令后会发现free(剩余)的内存很少,而自己又没有开过多的程序或服务。对于上述的情况,正确的解释是:linux的内存管理机制与windows的有所不同。具体的机制我们无需知道,我们需要知道的是,linux的内存管理机制的思想包括(不敢说就是)内存利用率最大化。内核会把剩余的内存申请为cached,而cached不属于free范畴。当系统运行时间较久,会发现cached很大,对于有频繁文件读写操作的系统,这种现象会更加明显。

直观的看,此时free的内存会非常小,但并不代表可用的内存小,当一个程序需要申请较大的内存时,如果free的内存不够,内核会把部分cached的内存回收,回收的内存再分配给应用程序。所以对于linux系统,可用于分配的内存不只是free的内存,还包括cached的内存(其实还包括buffers)。

对操作系统来说,Buffers和Cached是已经被使用的(上图Mem:这一行)
     1      MemFree=total-used
     2      196=7873-7677
 
对应用程序来说(上图)
     1      MemFree=buffers+cached+free
     2      6336=282+5857+196
 
由于不同的linux发行版,在系统制作过程中会修改部分源码。一般的系统(如Debian)使用free命令和读取meminfo文件两种方式计算的内存使用率是相同的。但是对于部分系统,如SUSE(并不确定是每个版本的都是,这里指SUSE Enterprise Server 11),其在free命令回显的结果中,cached部分的值并不等于meminfo文件中的cached所显示的值,而是等于meminfo文件中cached部分和SReclaimable部分之和。
 
也就是说,debian之类的系统为:
     可用内存=free的内存+cached的内存+buffers的内存 (上图Mem:这一行)
 
而SUSE之类的系统则为:
     可用内存=free的内存+cached的内存+buffers的内存+SReclaimable的内存
posted @ 2017-09-19 15:55  王之迷惑  阅读(10922)  评论(0编辑  收藏