linux内存管理实验,Linux内存管理机制研究
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内存管理机制研究相关推荐
- Unix/Linux操作系统分析实验二 内存分配与回收:Linux系统下利用链表实现动态内存分配
Unix/Linux操作系统分析实验一 进程控制与进程互斥 Unix/Linux操作系统分析实验三 文件操作算法: 实现在/proc目录下添加文件 Unix/Linux操作系统分析实验四 设备驱动: ...
- Linux软件基础实验,linux基本操作的实验
linux基本操作的实验 发布时间:2008-10-02 00:37:30来源:红联作者:sfwjeo 实验一.linux基本操作 1.实验目的 了解linux的基本命令,熟练掌握其基本操作 2.相关 ...
- linux内存耗尽实验,linux 内存耗尽的分析
在测试NAS性能,用fstest长时间写,分析性能变差的原因,发现server主机内存使用率很高. 1.首先查看内存 # top -M top - 14:43:12 up 14 days, 6 min ...
- linux用户登录实验,Linux用户和组相关命令及实验
本文简要介绍了在Linux系统下,如何对账户和组进行增.删.改的操作. 一. groupadd groupadd [选项] group_name -g GID:指定GID:默认是上一个组的GID+1: ...
- 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 ...
- linux标准IO实验,Linux系统编程(第三篇) 标准IO.pdf
第三章:标准I/O 目标: 本章旨在向学员介绍Linux系统 时间:3 学时 I/O相关函数的使用: 1)掌握I/O相关函数的特点及使 教学方法:讲授PPT 用方法 2 )了解I/O与系统调用相关的函 ...
- Linux软件基础实验,Linux基础与应用(基于CentOS7)
{getUnitName} {getLessonName} 敬请期待 免费 {getTaskName} 剩余观看时长:{watchLimitRemaining} 回放 {activityStartTi ...
- linux计算器程序实验,Linux下基于GTK+的单词数值计算器
一. 实验要求 综合运用CTK+提供的函数,按照一定的规则(具体见实验报告)计算一个单词或者一组单词的数值,并输出到屏幕或文件中. 1. 按照规则计算单词的值,如果 A B C D E F G H I ...
- 操作系统实验一 Linux基本操作|实验二 进程管理
由于当时没存代码,只有实验文档代码截图,文末也可直接获取实验文档. 操作系统实验 目录 实验一 Linux基本操作 实验二进程管理 实验一 Linux基本操作 1实验目的 1.熟悉在Linux操作系统 ...
- Unix/Linux操作系统分析实验四 设备驱动: Linux系统下的字符设备驱动程序编程
Unix/Linux操作系统分析实验一 进程控制与进程互斥 Unix/Linux操作系统分析实验二 内存分配与回收:Linux系统下利用链表实现动态内存分配 Unix/Linux操作系统分析实验三 文 ...
最新文章
- 淘宝2011.9.21校园招聘会笔试题+答案
- 零基础自学python看什么书-零基础学习Python那些书值得看
- 零基础自学python的建议-零基础学python是学2还是3好
- Cisco2620路由器的密码恢复和灾难性恢复
- mongodb创建用户
- ASP.NET中常用的优化性能方法(转)
- python软件设置代码字体的大小_PyCharm中代码字体大小调整方法
- 2017蓝桥杯省赛---java---B---2(纸牌三角形)
- GBDT是如何成为推荐系统顶级工具人的?
- 论文浅尝 - ACL2020 | 用于回答知识库中的多跳复杂问题的查询图生成方法
- [转载] Unicode文本排序和Unicode数据库
- python运算符and_Python AND运算子
- 怎么写c++ documentation_球鞋鞋标怎么看真假、有几种 耐克鞋标鉴定方法推荐
- 手机号码检测开通微信方法
- 几款对于学习前端比较好用的软件或网址
- linux 查找pcre源码,pcre使用例子
- 影视后期调色一般都会用到什么?
- WPS下合并doc文档
- java 自旋_java自旋锁的代码实现
- OpenGL BRDF和IBL渲染
热门文章
- PS小技巧 | 不需要抠图的黑白配
- 扫描文件PDF转换器
- python 操作access数据库
- IE, FF, Safari前端开发常用调试工具(转载)
- 有了net send,谁还用IM?
- python类中方法相互调用_python中同一个类,带参的方法直接如何相互调用
- 拓端tecdat|R语言弹性网络Elastic Net正则化惩罚回归模型交叉验证可视化
- 拓端tecdat|R语言、SAS潜类别(分类)轨迹模型LCTM分析体重指数 (BMI)数据可视化
- 拓端tecdat|R语言可视化探索BRFSS数据并逻辑回归Logistic回归预测中风
- Linux下开启关闭查看软件包信息