linux内存管理机制以及free命令详解
linux内存管理机制以及free命令详解
一、linux内存管理机制
1.物理内存和虚拟内存
直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。
物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。
作为物理内存的扩展,linux会在物理内存不足,使用交换分区的虚拟内存,更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样以来,物理内存得到了释放,这块内存就可以用于其它目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。
2. Linux的内存管理是分页存取机制
分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。
Linux系统会根据系统配置不时地进行页面交换操作,以保持一定量的空闲物理内存,有些配置下即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面
Linux 进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟 内存,有时我们会看到这么一个现象:linux物理内存还有很多,但是交换空间也使用了很多。其实,这并不奇怪,例如:一个占用很大内存的进程运行时,需 要耗费很多内存资源,此时就会有一些不常用页面文件被交换到虚拟内存中,但后来这个占用很多内存资源的进程结束并释放了很多内存时,刚才被交换出去的页面 文件并不会自动的交换进物理内存,除非有这个必要,那么此刻系统物理内存就会空闲很多,同时交换空间也在被使用,就出现了刚才所说的现象了。关于这点,不 用担心什么,只要知道是怎么一回事就可以了。
交换空间的页面在使用时会首先被交换到物理内存,如果此时没有足够的物理内存来容纳这些页面,它们又会被马上交换出去,如此以来,虚拟内存中可能没有足够空间来存储这些交换页面,最终会导致linux出现假死机、服务异常等问题,linux虽 然可以在一段时间内自行恢复,但是恢复后的系统已经基本不可用了。
二、监控内存
监控内存的使用状态是非常重要的,通过监控有助于了解内存的使用状态,比如内存占用是否正常,内存是否紧缺等等,监控内存最常使用的命令free
其中free默认单位是KB
free -m单位为MB
free -g单位为GB
针对free这个命令,对详细的数据进行分析
1.其中的相关说明:
Mem:表示物理内存统计
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况
系统的总物理内存:16334124Kb,但系统当前真正可用的内存并不是第一行free标记的1397016 Kb,它仅代表未被分配的内存。
我们使用total1、used1、free1、used2、free2等名称来代表上面统计数据的各值,1、2分别代表第一行(不考虑标题行)和第二行(不考虑标题行)的数据。
--------第一行数据:代表内核角度的统计--------
total1:表示物理内存总量。
used1:表示已使用(已分配出去)的物理内存总量,包括真正已使用和分配给缓存(包含buffers与cached)的数量。
free1:未被分配的物理内存。
shared1:共享内存,一般系统不会用到,这里也不讨论。
buffers1: 系统分配给buffers的内存大小。
cached1:系统分配给cached的内存数量。buffer与cache的区别见后面。
--------第二行数据:代表应用角度的统计--------
used2:实际使用内存总量。
free2:系统当前实际可用内存,包括未被分配的内存以及分配给buffers与cached的内存之和。这就是系统当前实际可用内存。
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数.
对操作系统来讲是Mem的参数.buffers1/cached1都是属于被使用
对应用程序来讲是(-/+ buffers/cach).buffers1/cached1是等同可用的,因为buffers1/cached1是为了提高程序执行的性能,当程序使用内存时,buffers1/cached1会很快地被使用
所以,以应用来看看,以(-/+ buffers/cache)的used和free为主.所以我们看这个就好了
2.结论
从上面的描述我们可以四个结论,分别是
1)total1 = used1 + free1
总的物理内存total1 = 已分配出去的物理内存used1+ 未被分配的物理内存free1即16334124 = 14937108 +1397016
2)total1 = used2 + free2
总的物理内存total1 = 实际使用的内存总量used2 +系统当前实际可用内存free2即16334124 = 9959888 + 6374236
3)used1 = buffers1 + cached1 + used2
已分配出去的物理内存used1 = 系统分配给buffers 的内存大小+系统分配给cached的内存数量+实际使用内存总量used2即14937108= 50360+4926860+9959888
4)free2 = buffers1 + cached1 + free1
系统当前实际可用内存free2 = 系统分配给buffers 的内存大小+系统分配给cached的内存数量+被分配的物理内存free1即6374236= 50360 +4926860+1397016
3.cache 和 buffer的区别:
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。
Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。
linux内存管理机制以及free命令详解相关推荐
- Linux内存管理机制研究
Linux内存管理机制研究 查看linux系统中处于free状态的内存有两个角度,一个是从内核的角度来看,一个是从应用层的角度来看的. 1.从内核的角度来看free的内存,就是内核目前可以直接分配到, ...
- linux内存管理的主要概念是虚拟内存,有关linux内存管理机制的相关内容,linux物理内存和虚拟内存,深入了解Linux内存运行 ......
在linux中空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然. 这是Linux内存管理的一个优秀特性,区别于Windows的内存管理. 主要特点: 无论物理内存有多大,L ...
- Linux中sort,uniq,cut,wc命令详解
Linux中sort,uniq,cut,wc命令详解 来源:hellodev 本文主要对Linux中sort,uniq,cut,wc这4个命令的使用方法进行了详细说明,希望对你有所帮助. sort s ...
- linux终端机详解,Linux reset设定终端机的状态命令详解
名称: reset, tset 使用方法: tset [-IQqrs] [-] [-e ch] [-i ch] [-k ch] [-m mapping] [terminal] 使用说明: reset ...
- linux 更新软件命令 失败,对linux下软件(库)的更新命令详解
在ubuntu服务器下安装包的时候,经常会用到sudo apt-get install 包名 或 sudo pip install 包名,那么两者有什么区别呢? 1.区别 pip用来安装来自PyPI( ...
- 在linux系统中创建文件夹,Linux系统中创建文件夹命令详解
Linux系统中创建一个新的文件夹我们可以使用命令来执行,下面由学习啦小编为大家整理了Linux系统中创建文件夹命令详解,希望对大家有帮助! Linux系统中创建文件夹命令详解 一.mkdir命令使用 ...
- linux下tar命令解压缩,tar解压缩命令 Linux下的tar压缩解压缩命令详解
<tar解压缩命令 Linux下的tar压缩解压缩命令详解>由会员分享,可在线阅读,更多相关<tar解压缩命令 Linux下的tar压缩解压缩命令详解(14页珍藏版)>请在人人 ...
- 【Linux】定时任务crontab和at命令详解
[Linux]定时任务crontab和at命令详解 linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的 ...
- linux命令打包文件,Linux系统中打包文件的命令详解
linux系统中遇到要打包文件的时候我们该使用什么命令呢?下面由秋天网 Qiutian.ZqNF.Com小编为大家整理了linux系统中打包文件的命令详解的相关知识,希望对大家有帮助! linux系统 ...
最新文章
- SharedObject实例.
- 【Computer Organization笔记14】指令流水中的控制冲突和异常
- ubuntu16.04 安装Opencv 3.1.0 import cv2 报错ImportError: No module named hdf5
- bt磁力种子与php文件,BT,种子和磁力链接
- 细胞自动机_神经细胞自动机用于艺术娱乐
- bootstrap 下拉列表获取_Bootstrap框架下下拉菜单的实现(代码示例)
- 股票术语之期货、期权
- 静态路由绑定探测组功能的配置
- 聋校计算机教学案例,聋校汉语拼音b、p的教学案例
- 关于花瓣网header条的思考
- 各种编码格式(非常经典)
- 2tb的硬盘容量在计算机中识别的容量为,硬盘容量限制又来了,用2T以上硬盘的要注意了...
- 表示自己从头开始的句子_表示一切从头开始的唯美句子38条
- Python3网络爬虫:今日头条新闻App的广告数据抓取
- TECO状态的生产订单结算到在制品怎么办?
- 给AI新手推荐的十篇最佳数据科学文章
- 自定义地雷数的扫雷(控制台运行)
- 第二天-03-安卓手机的入侵实验
- JS事件—unload、beforeunload
- Matlab数组中符号“~”的使用
热门文章
- 三位一体:打造软硬服一体化的区块链平台
- win10 tomcat nginx upstream timed out 10060
- css 边框太粗_9个很棒的CSS边框技巧
- word2016 加载EndNote X9插件(最后还有 超好用的使用技巧哦)
- 蓝凌专属钉钉智能OA 让数千万中小企业成长更高效
- python matplotlib在一张画布上画多个图的两种方法,plt.subplot(),plt.subplots()。
- MySQL 8.0版本驱动更换
- 探寻回忆中的第一台电脑:一段充满兴奋与热爱的旅程
- 鸿蒙落 万物生(中)
- h5+vant的视频播放横屏