Linux 内存 Buffers、Cache、Swap 及查看命令 free 详解
试验平台:
CentOS Linux release 7.6.1810
一、命令详解
1.free
命令详解
$ free --help
Options:
-b, --bytes #以字节为单位显示内存信息(b)
-k, --kilo #以千字节为单位显示内存信息(kb)
-m, --mega #以兆字节为单位显示内存信息(m)
-g, --giga #以千兆字节为单位显示内存信息(g)
--tera #以万兆字节为单位显示内存信息(t)
-h, --human #以很直观的信息显示内存信息,
--si #换算为 1000 而不是 1024
-l, --lohi #显示详细的低内存和高内存统计信息
-t, --total #附加一行显示 内存 和 Swap虚拟内存 的和
-s N, --seconds N #以 N(以秒为单位) 刷新打印一次
-c N, --count N #重复打印 N 次后停止刷新,以秒刷新
-w, --wide #将 buffer/cache 分开显示,显示比较详细的
--help #打印帮助信息
-V, --version #删除版本号
- 使用
free
命令查看内存信息
$ free -m
total used free shared buff/cache available
Mem: 1839 652 685 1 501 1018
Swap: 1024 16 1008
#total 此实例可用的总内存大小
#used 此实例已使用的内存大小(这里面包含 shared/buffers/cache 部分)
#free 此实例空闲的内存大小
#shared 进程间共享内存
#buffers 内存中写完的数据暂时缓存起来,定期将数据同步至磁盘上
#cache 内存中读完缓存起来的数据,这部分是为了下次查询时快速返回
#Swap 交换分区的信息
有些 openSUSE
低版本系统还会打印一个 -/+ buffers/cache
的信息:
-/+ buffers/cache看做两部分:
#-buffers/cache:缓冲区是还没有被"写入"磁盘的数据。正在使用的内存大小(注意不是 used 部分,因为 buffers 和 cache 并不是正在使用的,需要它们的时候是可以释放的)
其值 = used - buffers - cached = 1938MB – 497MB – 1235MB = 205MB
#+buffers/cache:缓存是指从磁盘中"读取"并存储以供以后使用的数据。可用的内存大小(同理也不是 free 表示的部分)
其值 = free + buffers + cached = 1982MB + 497MB + 1235MB = 3714MB
二、Buffer/Cache 详解
1.Buffer
(缓冲),简单说,Buffer
的核心作用是用来缓冲,缓和冲击。为了提高 内存
和 硬盘
(或其他 I/O
设备的数据交换而设计)
打个比方:每秒写 100
次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写这两件事。如果此时用个 buffer
暂存起来,变成每 10
秒写一次硬盘,对系统的冲击就很小,写入效率也会提高,极大缓和了冲击。
Buffer
主要是针对写操作设计的,更细的说是针对内存和硬盘之间的写操作来设计的,目的是将写的操作集中起来进行,减少磁盘碎片和硬盘反复寻址过程,提高性能。
2.Cache
(缓存),简单来说,Cache
的核心作用是加快取用的速度,暂时缓存起来。为了调高 CPU
和 内存
之间数据交换而设计
打个比方:比如一个很复杂的计算做完了,下次还要用结果,就把结果放手边一个好拿的地方存着,下次不用再算了。加快了数据取用的速度。
Cache
主要是针对读操作设计的
三、直观试验 Buffer/Cache
1.生成一个 1G
的文件
# dd if=/dev/zero of=testfirl bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 7.35442 s, 143 MB/s
# du -sh testfirl
1000M testfirl
2.清空全部缓存
# free -m
total used free shared buff/cache available
Mem: 1819 88 565 9 1165 1547
Swap: 0 0 0
# echo '3' > /proc/sys/vm/drop_caches
# free -m
total used free shared buff/cache available
Mem: 1819 82 1666 9 70 1612
Swap: 0 0 0
3.读取此文件,查看所消耗时间
# time cat testfirl > /dev/null
real 0m1.106s
user 0m0.005s
sys 0m1.100s
4.再次读取此文件,并查看 buffer
的大小
# time cat testfirl > /dev/null
real 0m0.178s
user 0m0.012s
sys 0m0.166s
#可以看到差不多快了整整 1秒 的时间
# free -m
total used free shared buff/cache available
Mem: 1819 83 664 9 1072 1567
Swap: 0 0 0
四、强制回收缓存内存
注意:强制回收前需要先进行
sync
同步数据到硬盘操作,避免强制回收时造成数据丢失;建议只在cache
占用大量内存时导致系统内存不够用,系统运行缓慢的情况下使用
1,仅清除 pagecahe
缓存页
# sync; echo 1 > /proc/sys/vm/drop_caches
2,清除 dentries
目录项 和 inodes
# sync; echo 2 > /proc/sys/vm/drop_caches
3,三项都清楚,pagecahe 缓存页
,dentries 目录项
和 inodes
# sync; echo 3 > /proc/sys/vm/drop_caches
4.清理不生效原因可能是:buffer/cached
使用的内存并不大时,而系统本身确实不足时无法回收
5.手动增加 buffer/cache
测试
$ free -h;find .>/dev/null
6.回收交换分区 Swap
$ swapoff -a && swapon -a
注意:如果已经使用了
Swap
,且当前清空下+buffers/cache
还有空间,在执行swapoff -a
操作时,会触发把Swap
中的内容交换到内存中,数据不会丢失
Over~
版权协议须知!
本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
1629 0 2020-12-16
博主卡片
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。
现在时间 2024-12-28
今日天气
随机推荐
站点统计
- 文章总数:241篇
- 分类总数:29个
- 评论总数:12条
- 本站总访问量 353455 次
@xiaozi 最后的分享的镜像下载地址打不开 服务器没有开机吗?
@yuanyuan 为什么我的4b安装centos7.9 插上tf卡 显示不兼...
@Wong arrhenius 牛比
@MakerFace 厉害了!
@TongSir 老哥 更新下我的友链链接 https://blog.ton...