Linux内存、Swap、Cache、Buffer详细解析
点击上方蓝色“方志朋”,选择“设为星标”回复“666”获取独家整理的学习资料!
来源:r6d.cn/abK6G
1. 通过free命令看Linux内存
total:总内存大小。
used:已经使用的内存大小(这里面包含cached和buffers和shared部分)。
free:空闲的内存大小。
shared:进程间共享内存(一般不会用,可以忽略)。
buffers:内存中写完的东西缓存起来,这样快速响应请求,后面数据再定期刷到磁盘上。
cached:内存中读完缓存起来内容占的大小(这部分是为了下次查询时快速返回)。
-/+ buffers/cache看做两部分:
-buffers/cache:正在使用的内存大小(注意不是used部分,因为buffers和cached并不是正在使用的,组织和人民需要是它们是可以释放的),其值=used-buffers-cached。
+buffers/cache:可用的内存大小(同理也不是free表示的部分),其值=free+buffers+cached。
Swap:硬盘上交换分区的使用大小。
设计的目的就是当上面提到的+buffers/cache表示的可用内存都已使用完,新的读写请求过来后,会把内存中的部分数据写入磁盘,从而把磁盘的部分空间当做虚拟内存来使用。
2. Buffer和Cache介绍
Cache(缓存),为了调高CPU和内存之间数据交换而设计,Buffer(缓冲)为了提高内存和硬盘(或其他I/O设备的数据交换而设计)。
Cache主要是针对读操作设计的,不过Cache概念可能容易混淆,我理解为CPU本身就有Cache,包括一级缓存、二级缓存、三级缓存,我们知道CPU所有的指令操作对接的都是内存,而CPU的处理能力远高于内存速度,所以为了不让CPU资源闲置,Intel等公司在CPU内部集成了一些Cache,但毕竟不能放太多电路在里面,所以这部分Cache并不是很大,主要是用来存放一些常用的指令和常用数据,真正大部分Cache的数据应该是占用内存的空间来缓存请求过的数据,即上面的Cached部分(这部分纯属个人理解,正确与否有待考证)。
Buffer主要是针对写操作设计的,更细的说是针对内存和硬盘之间的写操作来设计的,目的是将写的操作集中起来进行,减少磁盘碎片和硬盘反复寻址过程,提高性能。
在Linux系统内部有一个守护进程会定期清空Buffer中的内容,将其写入硬盘内,当手动执行sync命令时也会触发上述操作。
3. 常见症状
症状一:在Linux中频繁存取文件,物理内存很快用光,而cached一直在增长。
解释:Linux会对每次请求过的数据缓存在cache里,好处就是CPU的处理速度远远高于内存,所以在CPU和内存通讯的时候可以快速从cache中命中结果返回。
症状二:Swap被占用。
解释:内存可能不够了,才会占Swap,所以Swap可以作为服务器监控的一项指标,引起注意。
4. 手动清理Swap和buffers/cache
(1) 清理Swap
swapoff -a && swapon -a
操作说明:如果已经使用了Swap,且当前清空下+buffers/cache还有空间,在执行 swapoff -a操作时,会触发把Swap中的内容交换到内存中,数据不会丢失。
(2) 清理buffers/cache:
sync; sync; sync;&& echo 3 >/proc/sys/vm/drop_caches
sleep 2
echo 0 > /proc/sys/vm/drop_caches
操作说明:
sync-->将缓存的内从写回到硬盘中;
echo 3 >/proc/sys/vm/drop_caches-->修改drop_caches的值为3,默认为0,改为3系统会清理缓存的内容;
sleep 2 --> 等一下,防止上一步没执行完;
echo 0 >/proc/sys/vm/drop_caches --> 改回默认值
5. 总结
通过上面的分析可以知道,当空闲物理内存不多时,不一定表示系统运行状态很差,因为内存的cache及buffer部分可以随时被重用,在某种意义上,这两部分内存也可以看作诗额外的空闲内存。
swap如果被频繁调用,bi,bo长时间不为0,则才是内存资源是否紧张的依据。通过free看资源时,实际主要关注-/+ buffers/cache的值就可以知道内存到底够不够了。
热门内容:
主流微服务全链路监控系统之战
面试官问:为什么SpringBoot的 jar 可以直接运行?
实现一个全链路监控平台很难吗?Pinpoint、skywalking、zipkin,哪个实现比较好?
最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡
Linux内存、Swap、Cache、Buffer详细解析相关推荐
- Linux内存中的 buffer 和 cache
Linux内存中的 buffer 和 cache 到底是个什么东东? Linux 中的 free 命令,会输出: total 总量 used 已使用 free 空闲 shared 共享内存 buff ...
- Linux操作系统内核启动参数详细解析[转]
Linux操作系统内核启动参数详细解析http://os.51cto.com/art/200902/110080.htmhttp://os.51cto.com 2009-02-17 16:07 佚名 ...
- Linux内存之Cache
一. Linux内存之Cache 1.1.Cache 1.1.1.什么是Cache? Cache存储器,是位于CPU和主存储器DRAM之间的一块高速缓冲存储器,规模较小,但是速度很快,通常由SRAM( ...
- linux开放7050端口,Linux操作系统内核启动参数详细解析
Linux操作系统内核启动参数详细解析 2007-05-09 17:27 作者:little 来源:赛迪网 [摘要] Linux内核在启动的时候,能接收某些命令行选项或启动时参数.当内核不能识别某些硬 ...
- Swap()函数的详细解析
Swap()函数的详细解析 在c\c++编程上,我们常会用到Swap()函数,实现其两个数据之间的调换.但由于Swap()函数的运用存在诸多限制,很容易造成数据对调失败.下面让我们进入Swap()函数 ...
- linux初始化内存盘卡住,Linux系统内存磁盘初始化技术详细解析
转自:http://m.zol.com.cn/article/1271270.html?via=index Linux内存初始化技术(initrd)用于支持两阶段的系统引导过程,是在系统启动过程中被挂 ...
- 最全Linux驱动开发全流程详细解析(持续更新)
Linux驱动开发详细解析 一.驱动概念 驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁. 具体任务 读写设备寄存器(实现控制的方式) 完成设备的轮询.中断处理.DMA通信(CPU与外设通信 ...
- Linux内存中的 buffer 和 cache 到底是个什么东东?
Linux 中的 free 命令,会输出: total 总量 used 已使用 free 空闲 shared 共享内存 buffers cached 前面四项都比较好理解,一看我也就知道啥意思了.但 ...
- 清除linux内存buff/cache
buff/cache内存占用太高 使用服务器时感觉到明显卡顿,输入free -h命令查看内存占用 [root@shanghai mysql8] free -htotal used free share ...
最新文章
- 源自KPI交谈的思考
- mysql 同一张表查询_mysql 同一张表查询 left join
- 大脑比机器智能_机器大脑的第一步
- POJ1236 Network of Schools
- NLP深度学习:近期趋势概述(一)
- Python kafka操作实例
- Linux命令解释之useradd,userdel,usermod
- jqueryui时间插件_jQueryUI Progressbar插件
- 一篇文章搞定:扫码登录实现原理
- 2345劫持浏览器主页怎么办?以Microsoft Edge为例
- 逸致金品:如何从零开始学习板绘?
- ASP.NET Core (视频)教程汇总
- 什么是外汇EA呢?工作的原理又是什么呢?送给不懂外汇EA
- oracle10g dblink优化,dblink如果很慢可以用这种方式优化
- Apple App store的应用购买限制 - 年龄
- 汇编 浮点指令FLD,FSTP,FADD与FPU寄存器
- elementUI InfiniteScroll 无限滚动 一次加载到底不受禁用限制问题解决
- JobIntentService
- 预测房价--基于python的线性回归模型
- JavaScript常见的请求头和响应头