通常,我们会需要知道一台linux服务器内存总量,内存使用量以及内存剩余量,那么我们一般会想到free命令:
(free默认显示的数值是以KB为单位的,如果想要以MB为单位显示,可以用free -m)
以上图为例,看到输出后, 我们可能就会认为这台机器:内存总量为:7968712KB, 已使用:7852204, 剩余:116508
(之前我就是这样认为的)
不过今天在检查一台线上服务器的时候,发现通过free看到的已使用的内存总量,我们根本就没有使用那么多,而free所给我们展示的值是肯定不会错的,那这是为什么呢?
答案只有从man free中寻找了,通过man我们发现free给我们提供了一些选项:
-b 以byte为单位显示, -k 以kilobytes为单位显示, -m以 megabytes为单位显示
-t 会给我们在加上一行显示内存总量当前情况(默认是没有的),所以如果要查看一台机器内存的总使用量,应该给free加上-t选项
-o 选项用于控制是否显示缓存条件那一行,即上图的 -/+ buffers/cache 那一行 (不指定的时候是会显示的)
-s 选项可以在使用free的时候每隔多少秒输出一次。
所以,在使用free显示出系统当前的内存情况后,有这么几个计算公式来计算使用量与剩余量:
used=total-free 即 total=used+free
实际内存占用:used-buffers-cached即 total-free-buffers-cached
实际可用内存:buffers+cached+free
通过观察上图,我们发现,Total这行显示的是mem和swap累加的结果,
而内存真正的使用量与剩余量,是“-/+ buffers/cache”这行的结果。