Linux 中的内存使用率计算方式
背景介绍
在工作中处理问题的时候,遇到一个问题,自己根据 top
命令时查看到的 used 和 total 计算出来的内存使用率已经达到 90% 以上了,但是系统自带的监控软件计算出来的使用率往往没有这么高。在网上查询了一些文章,说应该使用 free
命令,top
命令显示的结果不太准确,因此决定将自己的学习过程记录一下。
小知识
Linux 的显示命令中有 free 和 available 两种表示空闲的内存,它们之间的区别如下:free 表示这部分内存没有被用来做任何事情,available 表示这边部分内存可以被应用程序申请使用。
freee 命令
free
命令的显示结果实际上是从文件 /proc/meminfo
中读取的,默认的显示结果如下图所示:
Linux 中为了加快系统的运行速度,往往会使用缓存的机制。这里的buffers 和 cached 就是操作系统为了加快运行速度使用到的内存,这部分内存不是某个进程申请的。当需要新启动一个程序时,而程序申请的内存又比较大时,这两部分的内存时可以释放出来给当前这个程序使用的。因此实际系统当前空闲,可供新的程序申请使用的应该是第二行显示的空闲内存。
top 命令
有了上面free
命令的显示结果介绍,也就明白了为什么根据 top
命令显示的 used 和 total 计算出来的内存使用率不准确,因为这里的 used 并没有除去 buffers 和 cached 使用的这部分内存,而这部分内存实际上是可以释放出来给程序使用的。
参考
[1] : free(1) - Linux manual page (man7.org)
[2] : linux - Meaning of the buffers/cache line in the output of free - Server Fault
[3] : top(1) - Linux manual page (man7.org)
[4] : Free vs. Available Memory in Linux