用Bollger记录技术之路的点滴...

关注高性能linux网络编程,NoSQL, c/c++/java ~~~ weibo @语_行 http://weibo.com/201281062~~~ twitter @JerryVector https://twitter.com/JerryVector
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

linux free命令理解误区记录

Posted on 2013-05-17 22:40  语行  阅读(475)  评论(0编辑  收藏  举报

通常,我们会需要知道一台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”这行的结果。