查看系统内存命令free
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内存到底哪里去了?