查看系统内存命令free

2013年1月8日 | 分类: 操作系统, 网络性能 | 标签:

linux操作系统下,执行free,可以看到当前系统的内存使用情况,本文就解释各个字段的含义以及buffer和cache的区别。

free: invalid option -- h
usage: free [-b|-k|-m|-g] [-l] [-o] [-t] [-s delay] [-c count] [-V]
  -b,-k,-m,-g show output in bytes, KB, MB, or GB
  -l show detailed low and high memory statistics
  -o use old format (no -/+buffers/cache line)
  -t display total for RAM + swap
  -s update every [delay] seconds
  -c update [count] times
  -V display version information and exit
[kongjian@v132172.sqa.cm4 tsar]$ free
             total       used       free     shared    buffers     cached
Mem:       7464296    6311612    1152684          0    1595768    2912804
-/+ buffers/cache:    1803040    5661256
Swap:            0          0          0

各个字段的含义:
total:总的内存量
used:使用的内存量
free:空闲的内存量
shared:进程的共享内存量
– buffers/cache:可用的内存量
+ buffers/cache:已用的内存量
(其中mem和swap,是系统的内存数据和swap分区数据)
可用内存=free+buffers+cached,也就是1152684+1595768+2912804=5661256
内存是否出现瓶颈,要看是否开始使用swap分区,如果没有进行swap交换,就不要担心内存不足。

free命令中,有cached和buffers的字段,它们的区别是:
cached缓存:是为了提高cpu和内存之间的数据交换而设计的,类似于cpu的cache技术
cpu需要的指令和数据都是从内存中获得的,为了提高速度,在cpu和内存中间又增加了几层缓冲,如一级、二级cache,利用了程序的访问局部性原理,不需要直接访问内存,而是从cache中获得数据。内存的cache使用也就是这个思想,比如文件读时,会放在内存中,然后后续的读不需要再访问磁盘,直接从内存中返回。
buffers缓冲:是为了提高内存和硬盘(或其它I/O设备)之间的数据交换的速度而设计的
buffers是根据磁盘的读写设计的,把分散的写操作集中进行,减少了磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(既写入磁盘),也可以通过sync命令手动清空缓冲。比如往移动硬盘写数据时,copy的时候,磁盘灯并不闪烁,过一会或者执行了sync,才开始真正写数据,卸载磁盘设备的时候,一般要等几秒,就是在做buffers的清空。
简单来说,buffer是即将要写入磁盘的文件系统的元数据,而cache是通过bufferio方式从磁盘中读出来的pages
具体可以参考霸爷的:Linux Used内存到底哪里去了?

本文的评论功能被关闭了.