Linux 中的内存使用率计算方式

246 阅读2分钟

背景介绍

在工作中处理问题的时候,遇到一个问题,自己根据 top 命令时查看到的 usedtotal 计算出来的内存使用率已经达到 90% 以上了,但是系统自带的监控软件计算出来的使用率往往没有这么高。在网上查询了一些文章,说应该使用 free 命令,top 命令显示的结果不太准确,因此决定将自己的学习过程记录一下。

小知识

Linux 的显示命令中有 freeavailable 两种表示空闲的内存,它们之间的区别如下:free 表示这部分内存没有被用来做任何事情,available 表示这边部分内存可以被应用程序申请使用。

freee 命令

free 命令的显示结果实际上是从文件 /proc/meminfo 中读取的,默认的显示结果如下图所示:

image.png Linux 中为了加快系统的运行速度,往往会使用缓存的机制。这里的bufferscached 就是操作系统为了加快运行速度使用到的内存,这部分内存不是某个进程申请的。当需要新启动一个程序时,而程序申请的内存又比较大时,这两部分的内存时可以释放出来给当前这个程序使用的。因此实际系统当前空闲,可供新的程序申请使用的应该是第二行显示的空闲内存

top 命令

有了上面free命令的显示结果介绍,也就明白了为什么根据 top 命令显示的 usedtotal 计算出来的内存使用率不准确,因为这里的 used 并没有除去 bufferscached 使用的这部分内存,而这部分内存实际上是可以释放出来给程序使用的。

image.png

参考

[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