系统负载监控-free命令中的buffer和cache

一 内存使用说明

Free 命令相对于top 提供了更简洁的查看系统内存使用情况:

[piaohailin@chinaso ~]# free -m
             total       used       free     shared    buffers     cached
Mem:         64417      60048       4368          0        832      29064
-/+ buffers/cache:      30151      34265
Swap:        32767          0      32767

这里显示的单位是MB。
在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。

Mem:表示物理内存统计。
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况。只有mem被当前进程实际占用完,即没有了buffers和cache时,才会使用到swap。

Mem 行(第一行)数据说明:
    Total:64417MB。表示物理内存总大小。
    Used:60048MB。表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
    Free:4368MB。表示未被分配的内存。
    Shared:0MB。共享内存,一般系统不会用到。
    Buffers:832MB。系统分配但未被使用的buffers数量。
    Cached:29064MB。系统分配但未被使用的cache数量。

-/+ buffers/cache 行(第二行)数据说明:
    Used:30151MB,实际使用的buffer 与cache总量,也是实际使用的内存总量。
    Free: 34265MB, 未被使用的buffers与cache和未被分配的内存之和,这就是系统当前实际可用内存。

根据以上分析,可以得出一下结论:
1.实际可用内存大小:
    Free(-/+ buffers/cache行)= Free(Mem)  +buffers(Mem) + Cached(Mem);
    34265MB                    = 4368MB + 832MB + 29064MB

2.已经分配的内存大小:
    Used(Mem) = Used(-/+ buffers/cache) + buffers(Mem) + Cached(Mem)
    60048MB   = 30151MB + 832MB + 29064MB

3.物理内存总大小
    total(Mem) = used(-/+ buffers/cache) + free(-/+ buffers/cache)
    64417MB      = 60048MB + 4368MB


二 buffer与cache的区别
    A buffer is something that has yet to be "written" to disk.
    A cache is something that has been "read" from the disk and stored for later use.
    简单记法:CR/BW

2.1 Cache
    Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。
    由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。
    Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。

2.2 Buffer
    Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。
    使用适当的关闭过程之前,绝对不要关掉电源,Sync命令倾空(Flushes)缓冲,也即,强迫所有未被写的数据写入磁盘,可用以确定所有的写操作都已完成。

在Free命令中显示的buffer和cache,它们都是占用内存:
    buffer : 作为buffer cache的内存,是块设备的读写缓冲区,更靠近存储设备,或者直接就是disk的缓冲区。
    cache: 作为page cache的内存, 文件系统的cache,是memory的缓冲区

    如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO 必会非常小。

三 Swap配置对性能的影响
    分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误。 如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程),如果Swap空间用完,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。

    通常情况下,Swap空间应大于或等于物理内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存的2-2.5倍。但根据不同的应用,应有不同的配置:如果是小的桌面系统,则只需要较小的Swap空间,而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服务器,随着访问量的增加,对Swap空间的要求也会增加,一般来说对于4G 以下的物理内存,配置2倍的swap,4G 以上配置1倍。

    另外,Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间处于等待状态,效率很低。用性能监视工具就会发现,此时的CPU并不很忙,而系统却慢。这说明,瓶颈在IO上,依靠提高CPU的速度是解决不了问题的。

四 总结
    为了提高性能,可以在多个磁盘做SWAP分区。
    如果内存小于4G,则设置物理内存的2倍。如果内存大于4G,则设置物理内存的一倍。
    断电之前,执行sync来写(flush)buffer中的数据到磁盘。

参考文章
Linux 内存机制 http://blog.csdn.net/tianlesoftware/article/details/5463790

猜你喜欢

转载自phl.iteye.com/blog/1987433
今日推荐