Linux 内存高速缓存(cache)类型分析

标签: linux 内存 高速缓存 | 发表时间:2014-06-18 17:46 | 作者:zhoushijun
出处:http://www.iteye.com

      在Liunx内存管理机制中,除了对目录项(dentry,Linux文件系统中某个inode的链接)进行缓存外,

还采取了两种高速缓存,即Buffer Cache和Page Cache,前者针对磁盘块的读写,后者针对文件inode的

读写。通过增加这些Cache,有效缩短 I/O时间。

       先通过free命令查看内存使用情况:

                 free -m

                    total       used       free     shared    buffers     cached  

Mem:         32176      30032       2144          0        249      25938

-/+ buffers/cache:       3844      28332

Swap:            0          0          0

        返回结果中,buffer和cache说明两种前面提及的两种高速缓存使用内存情况,其中:

        Buffers :说明缓存块设备读写的内存大小(buffer cache),这部分缓存主要用于

                       目录项、inode等文件系统元数据。如果ls一个包含很多内容的目录,可以

                       发现这个值明显增大。

        Cache   :说明用于缓存文件系统读写的内存大小(page cache),这部分缓存主要用于

                        打开的文件,如果 cache 的值很大,说明缓存的文件较多,在进行读写时,命

                        中率也将提高,如果频繁访问到的文件大部分被缓存,则必然减少磁盘的读IO。

                       It is similar like "Buffers", only this time it caches pages from file reading.

两种cache处理数据采用策略是不同的,具体如下:

buffer采用先进先出策略,cache则采用最少使用原则(LRU),即对于buffer缓存来说,

当缓存的内容达到其最大容量时,最先缓存的内容被清空,对于cache来说,当缓存的内容达到

其最大容量时,最少被访问的内容被清空。

 
释放不同高速缓存的方法是通过修改/proc文件系统相关参数,/proc是Linux虚拟文件系统,

通过对其进行读写操作实现与用户空间和内核空间的通信。即通过修改/proc中的内容,对当前kernel

的行为做出调整。内存缓存释放是通过调整/proc/sys/vm/drop_caches的值实现。

        具体规则如下:

              1)释放page cache

                     echo 1 > /proc/sys/vm/drop_caches
              2)是否VFS目录项和文件系统inodes
                     echo 2 > /proc/sys/vm/drop_caches
              3)释放 pagecache,VFS目录向和inodes
                   echo 3 > /proc/sys/vm/drop_caches
        其实在具体的应用中,不需要手动是否内存高速缓存,因为linux提供了相关机制来实现对这些高速
的最优控制,除非你看着不爽。其实查看实际的可以内存不是看free返回的第一行,而是看第二行,即
        -/+ buffers/cache:       3844      28332
        其中3844是实际已经使用的内存大小,28332是可用内存大小,前面的 -/+ buffers/cache是指:
        实际使用内存=used-buffers-cached
        实际可用内存=free+buffers-cached


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [linux 内存 高速缓存] 推荐:

Linux 内存高速缓存(cache)类型分析

- - Linux - 操作系统 - ITeye博客
      在Liunx内存管理机制中,除了对目录项(dentry,Linux文件系统中某个inode的链接)进行缓存外,. 还采取了两种高速缓存,即Buffer Cache和Page Cache,前者针对磁盘块的读写,后者针对文件inode的. 通过增加这些Cache,有效缩短 I/O时间.        先通过free命令查看内存使用情况:.

Linux虚拟内存实现原理

- Sepher - NoSQLFan
下面是一篇翻译文章,原文出自MongoDB的核心开发工程师 Kristina Chodorow 的个人博客,由NoSQLFan翻译整理. 我们都知道,MongoDB 使用内存映射的方式来进行数据文件的存取操作. 本文的目的就在于描述操作系统虚拟内存的使用及内存映射的内部实现. 当你运行一个程序,程序中有许多东西需要存储,堆、栈以及各种功能库.

Linux Used内存到底哪里去了?

- - 非业余研究
原创文章,转载请注明: 转载自 非业余研究. Linux Used内存到底哪里去了. 前几天 纯上 同学问了一个问题:. 我ps aux看到的RSS内存只有不到30M,但是free看到内存却已经使用了7,8G了,已经开始swap了,请问ps aux的实际物理内存统计是不是漏了哪些内存没算. 我有什么办法确定free中used的内存都去哪儿了呢.

Linux系统查看内存使用率

- - BlogJava-qileilove
Linux下看内存和CPU使用率一般都用top命令,但是实际在用的时候,用top查看出来的内存占用率都非常高,如:.   top –M看更直观,以M为单位.   接近98.7%,而实际上的应用程序占用的内存往往并没这么多,.   看%MEM这列的数字,按内存排序后,把前几名加起来,撑死了才不过55%,那剩下的内存都干嘛用了.

Linux与JVM的内存关系分析

- - 美团技术团队
在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约800m. 从表面上,物理内存应该是足够使用的;但实际运行的情况是,会发生大量使用SWAP(说明物理内存不够使用了),如下图所示. 同时,由于SWAP和GC同时发生会致使JVM严重卡顿,所以我们要追问:内存究竟去哪儿了.

超高速缓存的最佳实践

- - ImportNew
Performance Zone这个社区是由 New Relic 和 AppDynamics来维护的. 这两个人都是APM社区的用户,APM社区有很多的知名的用户,并且能够为这些用户减少很多的成本. 定制高速缓存解决方案是一件非常有趣的事情,它似乎是改善应用程序整体性能的最简单的方式. 然而,超高速缓存是一项很大的技术难题,在实践之前需要注意几个事项.

(总结)关于Linux的缓存内存 Cache Memory详解

- d0ngd0ng - 服务器运维与网站架构|Linux运维|互联网研究
前天有朋友问我,为啥我的Linux系统没运行多少程序,显示的可用内存这么少. 其实Linux与Win的内存管理不同,会尽量缓存内存以提高读写性能,通常叫做Cache Memory. 有时候你会发现没有什么程序在运行,但是使用top或free命令看到可用内存free项会很少,此时查看系统的 /proc/meminfo 文件,会发现有一项 Cached Memory:.

Nginx使用Linux内存加速静态文件访问

- - IT技术博客大学习
标签:   Nginx. Nginx是一个非常出色的静态资源web服务器. 如果你嫌它还不够快,可以把放在磁盘中的文件,映射到内存中,减少高并发下的磁盘IO. nginx.conf中所配置站点的路径是/home/wwwroot/res,站点所对应文件原始存储路径:/opt/web/res. shell脚本非常简单,思路就是拷贝资源文件到内存中,然后在把网站的静态文件链接指向到内存中即可.

[转][转]LINUX共享内存使用常见陷阱与分析

- - heiyeluren的blog(黑夜路人的开源世界)
来源: http://www.dcshi.com/?p=79. 所谓共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式. 是针对其他通信机制运行效率较低而设计的. 往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥. 其他进程能把同一段共享内存段“连接到”他们自己的地址空间里去.

linux实用技巧:检测内存泄漏工具Valgrind

- - CSDN博客系统运维推荐文章
1.Valgrind简介.         1.在我们编写C/C++的时候,最常见的错误之一就是内存泄露,这样的问题其实跟程序员的编程习惯密不可分. 如果你在申请内存空间之后能够马上在合适的位置释放内存. 会极大程度的避免内存泄漏的情况. 有时候我们确实忘记释放内存而导致了比较严重的错误,所以这个时候我们需要借助valgrind这个工具来判断内存泄漏.