Linux内存管理机制研究

查看linux系统中处于free状态的内存有两个角度,一个是从内核的角度来看,一个是从应用层的角度来看的。

1.从内核的角度来看free的内存,就是内核目前可以直接分配到,不需要额外的操作,这个free值是不包括系统中处于buffer和cache状态的内存;但是在内核需要时,或在系统运行逐步推进时,buffer和cache状态的内存可以变为free状态的内存。

2.从应用层的角度来看系统处于free状态的内存,这个值是包括处于buffer和cache的,所以应用层分配内存时,可以直接从buffer和cache中拿。

IXDBA.NET社区论坛

linux系统之所以提高这种机制,是因为把内存都置为free状态,还不如把最近使用过的内存缓存起来(如从磁盘中读取的数据),这样再次需要这些数据时可以直接从内存中取,而不需要有一个漫长的磁盘操作,这样可以提高系统的整体性能。因为free状态的内存中的内容是不可用的,与其闲置还不如发挥它们的作用。而在系统需要时,又可以快速的从这些可释放的内存中分配,我想这种机制是非常好的。

下面我们来看看free命令的结果:

total       used       free     shared    buffers     cached

Mem:           500        355        145          0          67            249

-/+ buffers/cache:       38         462

Swap:          996          1        994

在这个结果中的第一行是从内核角度来看系统内存使用状态的,可以看到free的内存只有145M;

第二行是从应用层的角度来看系统内存的使用状况,可以看到free的内存有462M;

你有没有看到462这个值的妙处呢????462 := 145 + 249 + 67

实例二:在Linux下查看内存我们一般用command free;

[root@nonamelinux ]# free

total     used    free  shared   buffers    cached;

Mem:       386024   377116   8908    0       21280      155468;

-/+ buffers/cache:  200368  185656;

Swap:      393552     0     393552;

下面是对这些数值的解释:

total:总计物理内存的大小。

used:已使用多大。

free:可用有多少。

Shared:多个进程共享的内存总额。

Buffers/cached:磁盘缓存的大小。

第三行(-/+ buffers/cached):

used:已使用多大。

free:可用有多少。

第四行就不多解释了。

区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是8908KB,已用内存是377116KB,其中包括,内核(OS)使用+Application(X,oracle,etc)使用的+buffers+cached.

第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。

所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。

如上例:

185656=8908+21280+155468

接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换。

如何看额定值(RHEL4.0):

#cat /proc/meminfo

交换将通过三个途径来减少系统中使用的物理页面的个数:

1.减少缓冲与页面cache的大小,

2.将系统V类型的内存页面交换出去,

3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。

事实上,少量地使用swap是不会影响到系统性能的。

下面是buffers与cached的区别。

buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages. cached是用来给文件做缓冲。

那就是说:buffers是用来存储,目录里面有什么内容,权限等等。而cached直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。

实验:在一台没有什么应用的机器上做会看得比较明显。记得实验只能做一次,如果想多做请换一个文件名。

#free

#man X

#free

#man X

#free

你可以先后比较一下free后显示buffers的大小。

另一个实验:

#free

#ls /dev

#free

你比较一下两个的大小,当然这个buffers随时都在增加,但你有ls过的话,增加的速度会变得快,这个就是buffers/chached的区别。

实例三:

linux 优先使用物理内存,当物理内存还有空闲时,linux是不会施放内存的,即时占用内存的程序已经被关闭了(这部分内存就用来做缓存了)。也就是说,即时你有2G的内存,用过一段时间后,也会被占满。这样做的好处是,启动那些刚开启过的程序、或是读取刚存取过得数据会比较快,对于服务器很有好处。

你可以用 free 指令查看一下输出,用 used 减去 buffer 和 cache,才是你运行中的程序所占用的空间,这是我的输出:

total     used      free    shared   buffers    cached

Mem:   516300   504264  12036     0       88396    236792

-/+ buffers/cache: 179076 337224

Swap: 1544184 21276 1522908

504264 - 88396 - 236792 = 179076

也就是说目前正在被使用的内存只有 179 兆。不要被 504兆的used吓住了。

windows则总是给内存留下一定的空闲空间,即时内存有空闲也会让程序使用一些虚拟内存,这样做的好处是,启动新的程序比较快,直接分给它些空闲内存就可以了,而linux下呢?由于内存经常处于全部被使用的状态,则要先清理出一块内存,再分配给新的程序使用,因此,新程序的启动会慢一些。

另外,内存是随机访问的,也就是说,无论你的内存占用了多少,数据的存取时间都是相同的,跟硬盘不同

linux内存管理实验,Linux内存管理机制研究相关推荐

  1. Unix/Linux操作系统分析实验二 内存分配与回收:Linux系统下利用链表实现动态内存分配

    Unix/Linux操作系统分析实验一 进程控制与进程互斥 Unix/Linux操作系统分析实验三 文件操作算法: 实现在/proc目录下添加文件 Unix/Linux操作系统分析实验四 设备驱动: ...

  2. Linux软件基础实验,linux基本操作的实验

    linux基本操作的实验 发布时间:2008-10-02 00:37:30来源:红联作者:sfwjeo 实验一.linux基本操作 1.实验目的 了解linux的基本命令,熟练掌握其基本操作 2.相关 ...

  3. linux内存耗尽实验,linux 内存耗尽的分析

    在测试NAS性能,用fstest长时间写,分析性能变差的原因,发现server主机内存使用率很高. 1.首先查看内存 # top -M top - 14:43:12 up 14 days, 6 min ...

  4. linux用户登录实验,Linux用户和组相关命令及实验

    本文简要介绍了在Linux系统下,如何对账户和组进行增.删.改的操作. 一. groupadd groupadd [选项] group_name -g GID:指定GID:默认是上一个组的GID+1: ...

  5. linux程序接口实验,Linux程序接口实验:取进程标志及用户信息

    0.环境平台 操作系统平台: Linux leaf 4.4.0-75-generic #96-Ubuntu SMP Thu Apr 20 09:56:33 UTC 2017 x86_64 x86_64 ...

  6. linux标准IO实验,Linux系统编程(第三篇) 标准IO.pdf

    第三章:标准I/O 目标: 本章旨在向学员介绍Linux系统 时间:3 学时 I/O相关函数的使用: 1)掌握I/O相关函数的特点及使 教学方法:讲授PPT 用方法 2 )了解I/O与系统调用相关的函 ...

  7. Linux软件基础实验,Linux基础与应用(基于CentOS7)

    {getUnitName} {getLessonName} 敬请期待 免费 {getTaskName} 剩余观看时长:{watchLimitRemaining} 回放 {activityStartTi ...

  8. linux计算器程序实验,Linux下基于GTK+的单词数值计算器

    一. 实验要求 综合运用CTK+提供的函数,按照一定的规则(具体见实验报告)计算一个单词或者一组单词的数值,并输出到屏幕或文件中. 1. 按照规则计算单词的值,如果 A B C D E F G H I ...

  9. 操作系统实验一 Linux基本操作|实验二 进程管理

    由于当时没存代码,只有实验文档代码截图,文末也可直接获取实验文档. 操作系统实验 目录 实验一 Linux基本操作 实验二进程管理 实验一 Linux基本操作 1实验目的 1.熟悉在Linux操作系统 ...

  10. Unix/Linux操作系统分析实验四 设备驱动: Linux系统下的字符设备驱动程序编程

    Unix/Linux操作系统分析实验一 进程控制与进程互斥 Unix/Linux操作系统分析实验二 内存分配与回收:Linux系统下利用链表实现动态内存分配 Unix/Linux操作系统分析实验三 文 ...

最新文章

  1. 淘宝2011.9.21校园招聘会笔试题+答案
  2. 零基础自学python看什么书-零基础学习Python那些书值得看
  3. 零基础自学python的建议-零基础学python是学2还是3好
  4. Cisco2620路由器的密码恢复和灾难性恢复
  5. mongodb创建用户
  6. ASP.NET中常用的优化性能方法(转)
  7. python软件设置代码字体的大小_PyCharm中代码字体大小调整方法
  8. 2017蓝桥杯省赛---java---B---2(纸牌三角形)
  9. GBDT是如何成为推荐系统顶级工具人的?
  10. 论文浅尝 - ACL2020 | 用于回答知识库中的多跳复杂问题的查询图生成方法
  11. [转载] Unicode文本排序和Unicode数据库
  12. python运算符and_Python AND运算子
  13. 怎么写c++ documentation_球鞋鞋标怎么看真假、有几种 耐克鞋标鉴定方法推荐
  14. 手机号码检测开通微信方法
  15. 几款对于学习前端比较好用的软件或网址
  16. linux 查找pcre源码,pcre使用例子
  17. 影视后期调色一般都会用到什么?
  18. WPS下合并doc文档
  19. java 自旋_java自旋锁的代码实现
  20. OpenGL BRDF和IBL渲染

热门文章

  1. PS小技巧 | 不需要抠图的黑白配
  2. 扫描文件PDF转换器
  3. python 操作access数据库
  4. IE, FF, Safari前端开发常用调试工具(转载)
  5. 有了net send,谁还用IM?
  6. python类中方法相互调用_python中同一个类,带参的方法直接如何相互调用
  7. 拓端tecdat|R语言弹性网络Elastic Net正则化惩罚回归模型交叉验证可视化
  8. 拓端tecdat|R语言、SAS潜类别(分类)轨迹模型LCTM分析体重指数 (BMI)数据可视化
  9. 拓端tecdat|R语言可视化探索BRFSS数据并逻辑回归Logistic回归预测中风
  10. Linux下开启关闭查看软件包信息