`
85977328
  • 浏览: 1899007 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

系统负载监控-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
分享到:
评论

相关推荐

    linux内存中buffer与cache的区别

    在`free`命令输出的结果中,我们可以看到两个关键指标:`buffers`和`cache`。这两个指标共同反映了Linux系统如何高效利用内存资源。具体来说: - **buffers**和**cache**的总量代表了已经被分配用于缓存的内存空间...

    Oracle 中 Buffer Cache 的研究.pdf

    Oracle内存主要分为系统全局区(SGA)和程序全局区(PGA),其中SGA又包含数据缓冲区(Data Buffer Cache)、日志缓冲区(Redo Log Buffer)和共享池(Shared SQL Pool)。数据缓冲区是SGA中最重要的部分,也就是Buffer Cache...

    Linux系统问题排查

    - `uptime`和`w`命令可以查看当前的系统负载情况。 3. **CPU型号与负载** - **查看CPU型号**: - 使用`dmidecode`命令获取CPU详细信息。 - **CPU负载监控**: - 使用`uptime`和`w`命令定期检查CPU负载情况。 4....

    多层面“把脉”Linux运行状态.pdf

    - `vmstat`中的`swpd`列表示交换内存使用情况,`free`列显示物理内存的可用量,`buff`和`cache`分别表示Buffer和Page Cache的大小,这些都对系统性能有直接影响。 - 如果`si`和`so`(交换内存的入和出)持续非零,...

    linux可用内存足够为什么还用swap.docx

    这里需要注意的是,Linux系统中的“可用内存”(available)是一个更为综合的指标,它包括了真正意义上的空闲内存(free)加上部分buffer/cache可以快速释放出来的内存量。从上述数据可以看出,尽管buffer/cache占用...

    GBase8s数据库监控指标.doc

    - **Buffer Read/Write Cache**:内存缓冲区和缓存区的大小,可通过`vmstat`命令查看对应的`cache`和`buff`项。 3. **磁盘I/O指标**: - **DISK I/O Busy Rate**:磁盘的繁忙程度,通过`iostat –d –x –k 1 1`...

    程序效能常规处理方法1

    - 当执行速度异常时,可能需要清除ORACLE缓存,如`ALTER SYSTEM FLUSH SHARED_POOL`、`ALTER SYSTEM FLUSH BUFFER_CACHE`和`ALTER SYSTEM FLUSH GLOBAL_CONTEXT`。 6. **使用效能工具进行作业分析**: - 对于T100...

    oracle性能调优.doc

    综上所述,Oracle性能调优涉及对SGA中多个组件的精细化管理,包括Shared Pool和Buffer Cache的大小调整、对象管理以及监控各种性能指标。通过有效的调优,可以显著提升Oracle数据库的响应速度和整体性能,降低系统...

    linux系统基本的内存知识讲解.docx

    了解这些内存管理概念和监控方法,可以帮助Linux系统管理员有效地分析和优化系统的内存使用,从而提升系统性能和稳定性。在面对内存相关的性能问题时,可以结合`free`、`watch`和`vmstat`等工具进行深入排查和调整。

    linux 高负载下mysql数据库优化

    在Linux环境下,当MySQL数据库面临高负载,...总的来说,优化MySQL数据库需要结合实际的系统资源和工作负载,通过监控、调整参数和改进查询策略,来实现更高效的数据库运行。定期检查和调整配置是保持系统稳定的关键。

    oracle常用性能监控SQL语句

    - **应用场景**: 在监控数据库性能时,了解SGA中空闲内存的情况非常重要,因为它直接关系到系统资源的有效利用程度。 #### 十、Data File I/O 监控 - **SQL**: ```sql select df.tablespace_name "Name", df....

    vmstat详解.

    `vmstat`是Unix及类Unix系统(包括Linux)中一个重要的系统性能监控工具,用于报告虚拟内存统计信息,同时也提供了关于进程、内存、交换、磁盘I/O和CPU活动的快照。 #### 描述解读:vmstat详解 此描述强调了`...

    有关Oracle常见的性能优化的方法

    通过`v$librarycache`视图监控library pool的重载率和使用率,确保其在合理范围内。 - **Buffer Cache**:负责缓存数据块,提高I/O性能。通过`v$sysstat`视图监控物理读取和一致获取的比率,以判断是否需要增大缓冲...

    Oracle性能优化10大要点[归类].pdf

    Oracle数据库的性能优化是软件开发中的重要环节,...在实际操作中,需要结合系统负载、资源使用情况和应用特点,采取适当的优化措施,以达到最佳性能效果。Oracle性能优化是一个持续的过程,需要不断监控、分析和调整。

    linux日常运维练习题

    本文总结了 Linux 日常运维中常见的实践问题,涵盖了 Linux 系统的基本命令、系统监控、进程管理、网络配置、安全设置、文件传输等方面。 1. 如何看出当前 Linux 系统有几颗物理 CPU 和没课 CPU 的核数? 查看 CPU ...

    ceph知识树.pdf

    - **PageCache和BufferCache**:用于提高文件读写性能。 - **内存信息查看命令**:如free、vmstat等。 **进程管理:** - **ps/top/kill/pkill/mpstat命令的使用**:管理进程。 - **进程同步机制**:互斥锁、信号量...

    Oracle 内存配置

    3. **调整内存池大小**:Oracle会根据系统负载自动调整各个内存池的大小,如`Database Buffer Cache`、`Shared Pool`、`Large Pool`等。 4. **监控内存使用情况**:通过查看`V$SGA_TARGET_ADVICE`视图,可以了解...

    Linux平台服务器检查标准手册

    `free`命令和`vmstat2`命令用来检查内存的使用情况,特别注意buffer/cache的free值,剩余内存应保证至少有300M。`df -h`命令查看文件系统的空间使用情况,不应超过80%。网络的检查包括使用`ifconfig -a`检查网卡的IP...

Global site tag (gtag.js) - Google Analytics