`

Linux系统所使用的真实内存

 
阅读更多

我们使用的Linux和Windows可不太一样,用top命令得出来的可能不是真实使用的内存,用free 命令第二行才是系统真实使用的内存。如果发现PHP-CGI把你的内存占满了可不要惊慌哦。

Page cache和buffer cache一直以来是两个比较容易混淆的概念,在网上也有很多人在争辩和猜想这两个cache到底有什么区别,讨论到最后也一直没有一个统一和正确的结论,在我工作的这一段时间,page cache和buffer cache的概念曾经困扰过我,但是仔细分析一下,这两个概念实际上非常的清晰。如果能够了解到这两个cache的本质,那么我们在分析io问题的时候可能会更加得心应手。

Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当page cache的数据需要刷新时,page cache中的数据交给buffer cache,但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。
Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存到buffer cache中。
简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到buffer cache。
补充一点,在文件系统层每个设备都会分配一个def_blk_ops的文件操作方法,这是设备的操作方法,在每个设备的inode下面会存在一个 radix tree,这个radix tree下面将会放置缓存数据的page页。这个page的数量将会在top程序的buffer一栏中显示。如果设备做了文件系统,那么会生成一个 inode,这个inode会分配ext3_ops之类的操作方法,这些方法是文件系统的方法,在这个inode下面同样存在一个radix tree,这里会缓存文件的page页,缓存页的数量在top程序的cache一栏进行统计。从上面的分析可以看出,2.6内核中的buffer cache和page cache在处理上是保持一致的,但是存在概念上的差别,page cache针对文件的cache,buffer是针对磁盘块数据的cache,仅此而已。
现在不都是只有page cache了吗? buffer pages其实也是page cache里面的页。只是多了一层抽象,通过buffer_head来进行一些访问管理
对,从Linux算法实现的角度,page cache和buffer cache目前是一样的,但是从功能抽象和具体应用来讲,这两者还是存在区别的,这一点可以从top工具的统计信息中看得出来,关注一下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.
在终端中敲入:free
显示:totalusedfreesharedbufferscached
Mem: 255268 23833216936 0 85540 126384
-/+ buffers/cache:26408228860
系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存并不是第一行free 标记的 16936Kb,它仅代表未被分配的内存。
我们使用total1、used1、free1、used2、 free2 等名称来代表上面统计数据的各值,1、2 分别代表第一行和第二行的数据。
total1:表示物理内存总量。
used1:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
free1:未被分配的内存。
shared1:共享内存,一般系统不会用到,这里也不讨论。
buffers1:系统分配但未被使用的buffers 数量。
cached1:系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。
used2:实际使用的buffers 与cache 总量,也是实际使用的内存总量。
free2:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。
可以整理出如下等式:
total1 = used1 + free1
total1 = used2 + free2
used1 = buffers1 + cached1 + used2
free2 = buffers1 + cached1 + free1

转帖自:Linux社区

分享到:
评论

相关推荐

    Linux系统内存使用经验

    Linux的内存管理,实际上跟windows的内存管理有很相像的地方,都是用虚拟内存这个的概念,文中介绍了在Linux下查看内存用的command free命令,并对反回的参数进行解释。

    Linux操作系统的内存使用机制研究

    Linux支持虚拟内存(Virtual Mmemory),虚拟内存是指使用磁盘当作RAM的扩展,这样可用的内存的大小就相应地增大了。当然,读写硬盘要比直接使用真实内存慢得多(要慢数千倍),所以程序就不会象一直在内存中运 行的那样...

    Linux服务器的系统内存监控方法详细解析

    内存是Linux内核所管理的最重要的资源之一。内存管理系统是操作系统中最为重要的部分,...本文阐述了内存使用情况监测内容,介绍了使甩vmstat命令监视虚拟内存使用情况,讨论了Linux服务器的内存泄露和回收内存的方法。

    linux内存泄漏查找

    /dev 该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,你可以访问这些外部设备,与访问一个文件或一个目录没有区别。例如在系统中键入“cd /dev/cdrom”,就可以看到光驱中的文件;...

    Linux系统内存磁盘初始化技术详细解析

    initrd包含很多可执行程序和驱动,并允许在临时的内存磁盘根 文件系统被卸载,内存被释放后挂载真实的root文件系统。在许多嵌入式linux文件系统中,initrd是最终的根文件系统。这篇文章主要讲解了 linux2.6内核的...

    Linux操作系统的内存使用方法详细解析

    Linux内核在用户申请内存的时 候,只是给它分配了一个线性区(也就是虚存),并没有分配实际物理内存;只有当用户使用这块内存的时候,内核才会分配具体的物理页面给用户,这时候才占用 宝贵的物理内存。内核释放...

    Linux应用技术:任务Linux系统的安装.doc

    任务1 Linux系统的安装 实验目的 1、掌握Red Hat Enterprise Linux操作系统的安装 2、掌握对Linux操作系统的基本系统设置 3、掌握用虚拟机安装Linux的方法 实验内容 硬盘分区 安装启动管理程序 设置网络环境 使用...

    linux 内存管理(虚拟地址到物理地址)

    Linux操作系统采用虚拟内存管理技术,...利用这种虚拟地址不但能起到保护操作系统的效果(用户不能直接访问物理内存),而且更重要的是,用户程序可使用比实际物理内存更大的地址空间(具体的原因请看硬件基础部分)

    通过虚拟机安装linux操作系统

    虚拟机软件能在Windows系统上虚拟出多个计算机,由它创建的虚拟机与真实的计算机几乎一模一样,不但虚拟有自己的CPU、内存、硬盘、光驱,甚至还有自己的BIOS。在这个虚拟机上,可以安装Linux、OS/2、FreeBSD等其他...

    按需对Linux系统内核进行定制和修改

    众多的Linux用户在经历了对Linux由好奇到熟悉的...如 果用户能够根据自己的实际情况对Linux系统内核进行合理的修改,可以有效的简化Linux内核,去除不需要的组件,从而提供更快的系统启动速度,释放 更多的内存资源。

    Linux系统查看内存使用率

    Linux下看内存和CPU使用率一般都用top命令,但是实际在用的时候,用top查看出来的内存占用率都非常高,如:  Mem: 4086496k total, 4034428k used, 52068k free, 112620k buffers  Swap: 4192956k total,...

    Linux二级文件系统模拟

    Linux二级文件系统模拟,实际运行环境是内存

    Linux系统编程

    《Linux系统编程》描述了使用标准接口包括使用Linux独有的高级接口时,在功能和性能之间如何进行权衡取舍的策略。  该书同样也是一本内行人士编写灵活高效代码的学习指南。作为内核黑客和本书的作者,RobertLoVe...

    linux学习笔记(包含Linux系统和shell编程).rar

    内核会记录哪些内存页面正在使用中,自动把一段时间未访问的内存页面复制到交换空间区域(称之为换出,swapping out)——即使还有内存可用。当程序要访问一个已被换出的内存页面时,内核必须将物理内存中的另一个...

    包含LINUX内核同步、信号、内存、调度、文件系统.rar

    内存管理 涉及到 物理内存管理 和 虚拟内存管理 , 是 Linux 内核中 最复杂的模块 ; 虚拟内存管理 包括 : 反向映射 , KSM , MMAP 映射 , 缺页中断 , 共享内存 , 进程虚拟地址空间管理 , 页面回收 ; 物理内存管理 ...

    Linux内存管理模拟器.rar_Linux C语言_二级页表模拟_内存分页管理_内存管理模拟_数学建模

    Linux下使用c语言实现的内存管理模拟器 假设有台计算机物理内存大小为4MB,每个内存页大小为4k。采用分页机制,使用二级页表,第一级为页目录,共有1024项,每个页目录项指向一个页表,每个页表项指向一个实际的物理...

    操作系统(内存管理)

    文将对 Linux™ 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半...

    linux操作系统培训资料.pptx

    Linux常用操作命令 命令 功能 grep 在指定文件查找指定字符串 mv 移动文件或目录 chmod 改变文件权限指令 man 命令或函数帮助查询指令 top 查看cpu和内存使用情况的指令 ps 查看当前运行的进程的指令 pstree 查看...

    linux操作系统观察资源常用命令

    linux操作系统观察资源常用命令,特别针对新手,如何在linux操作系统作性能测试,分析性能数据.

    Linux服务器性能调优

    ·优化linux系统的调度器、内存、i/o、文件系统和网络 ·对运行商业工作负荷的web、文件、数据库,及应用服务器进行调优 ·预测调整参数或配置信息的变化所产生的影响 ·调整linux代码:对设计、定时

Global site tag (gtag.js) - Google Analytics