点击上方蓝色“方志朋”,选择“设为星标”回复“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详细解析相关推荐

  1. Linux内存中的 buffer 和 cache

    Linux内存中的 buffer 和 cache 到底是个什么东东? Linux 中的 free 命令,会输出: total 总量 used  已使用 free 空闲 shared 共享内存 buff ...

  2. Linux操作系统内核启动参数详细解析[转]

    Linux操作系统内核启动参数详细解析http://os.51cto.com/art/200902/110080.htmhttp://os.51cto.com 2009-02-17 16:07 佚名 ...

  3. Linux内存之Cache

    一. Linux内存之Cache 1.1.Cache 1.1.1.什么是Cache? Cache存储器,是位于CPU和主存储器DRAM之间的一块高速缓冲存储器,规模较小,但是速度很快,通常由SRAM( ...

  4. linux开放7050端口,Linux操作系统内核启动参数详细解析

    Linux操作系统内核启动参数详细解析 2007-05-09 17:27 作者:little 来源:赛迪网 [摘要] Linux内核在启动的时候,能接收某些命令行选项或启动时参数.当内核不能识别某些硬 ...

  5. Swap()函数的详细解析

    Swap()函数的详细解析 在c\c++编程上,我们常会用到Swap()函数,实现其两个数据之间的调换.但由于Swap()函数的运用存在诸多限制,很容易造成数据对调失败.下面让我们进入Swap()函数 ...

  6. linux初始化内存盘卡住,Linux系统内存磁盘初始化技术详细解析

    转自:http://m.zol.com.cn/article/1271270.html?via=index Linux内存初始化技术(initrd)用于支持两阶段的系统引导过程,是在系统启动过程中被挂 ...

  7. 最全Linux驱动开发全流程详细解析(持续更新)

    Linux驱动开发详细解析 一.驱动概念 驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁. 具体任务 读写设备寄存器(实现控制的方式) 完成设备的轮询.中断处理.DMA通信(CPU与外设通信 ...

  8. Linux内存中的 buffer 和 cache 到底是个什么东东?

    Linux 中的 free 命令,会输出: total 总量 used  已使用 free 空闲 shared 共享内存 buffers cached 前面四项都比较好理解,一看我也就知道啥意思了.但 ...

  9. 清除linux内存buff/cache

    buff/cache内存占用太高 使用服务器时感觉到明显卡顿,输入free -h命令查看内存占用 [root@shanghai mysql8] free -htotal used free share ...

最新文章

  1. 源自KPI交谈的思考
  2. mysql 同一张表查询_mysql 同一张表查询 left join
  3. 大脑比机器智能_机器大脑的第一步
  4. POJ1236 Network of Schools
  5. NLP深度学习:近期趋势概述(一)
  6. Python kafka操作实例
  7. Linux命令解释之useradd,userdel,usermod
  8. jqueryui时间插件_jQueryUI Progressbar插件
  9. 一篇文章搞定:扫码登录实现原理
  10. 2345劫持浏览器主页怎么办?以Microsoft Edge为例
  11. 逸致金品:如何从零开始学习板绘?
  12. ASP.NET Core (视频)教程汇总
  13. 什么是外汇EA呢?工作的原理又是什么呢?送给不懂外汇EA
  14. oracle10g dblink优化,dblink如果很慢可以用这种方式优化
  15. Apple App store的应用购买限制 - 年龄
  16. 汇编 浮点指令FLD,FSTP,FADD与FPU寄存器
  17. elementUI InfiniteScroll 无限滚动 一次加载到底不受禁用限制问题解决
  18. JobIntentService
  19. 预测房价--基于python的线性回归模型
  20. JavaScript常见的请求头和响应头

热门文章

  1. oralce rollup 小计合计_总计与小计–WITH ROLLUP
  2. 2018-3-15模式识别--学习笔记(一)
  3. Python中的super()函数
  4. git之reset图解
  5. 20180829-Java多线程编程
  6. 前端 ----jQuery的动画效果
  7. mail 发送email
  8. 洛谷P2763 试题库问题
  9. iphone 在设置了initial-scale=1 之后,在设置滚动条之后,没有滑动效果的解决办法...
  10. 处理问题的方法--抽象和特例化