阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux内存、Swap、Cache、Buffer

60次阅读
没有评论

共计 1838 个字符,预计需要花费 5 分钟才能阅读完成。

导读 在 Linux 系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好, 但是凡事也有例外。

Linux 内存、Swap、Cache、Buffer

1. 通过 free 命令看 Linux 内存

Linux 内存、Swap、Cache、Buffer

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 介绍

Linux 内存、Swap、Cache、Buffer

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 的值就可以知道内存到底够不够了。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计1838字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中